读书人

intel 平板的一个widget奇效demo简单版

发布时间: 2012-09-11 10:49:04 作者: rapoo

intel 平板的一个widget特效demo简单版

好久没来看博客了,今天进来,给大家带来我最近写得一个特效。当然目前提供的是简单得版本,只供大家学习研究用,如果大家也有好的东西欢迎分享!

居然发现插入截图不方便。。。无语!

新浪微博:weibo.com/myzoooo

?

效果如下:

?

?intel 平板的一个widget奇效demo简单版

?

?

import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.event.MouseMotionListener;import java.awt.image.BufferedImage;import java.io.File;import javax.swing.JFrame;import javax.swing.JPanel;public class WinMain extends JFrame {private static final long serialVersionUID = 1L;static final int DISPLAY_NUMBER = 7;static final int MARGIN = 50;int [][] positions = new int[DISPLAY_NUMBER][3];int [] pox = new int[DISPLAY_NUMBER];boolean stopThread = false;boolean start = false;Jpan jp = null;Image[] mImages = null;BufferedImage bufferImage = null;boolean isLeft = false;public WinMain() {mImages = getImages();setSize(800, 500);setLocation(300, 0);setTitle("CoverFlow");setDefaultCloseOperation(EXIT_ON_CLOSE);init();jp=new Jpan();jp.addMouseListener(mouseListener);jp.addMouseMotionListener(mouseMotionListener);add(jp);setVisible(true);}public void init() {int v = DISPLAY_NUMBER/2;for(int i = -v,j = 0;i<=v;i++,j++){int x = i*MARGIN;positions[j][0] = x ;positions[j][1] = (int) getY(x);positions[j][2]=j;}sortY();}public void sortY(){for(int i=0;i<DISPLAY_NUMBER -1 ;i++){for(int j=0;j<DISPLAY_NUMBER-i-1;j++){int y = positions[j][1];int y2 = positions[j+1][1];if(y>y2){int tx = positions[j][0];int ty = positions[j][1];int tidx = positions[j][2];positions[j][0] = positions[j+1][0];positions[j][1] = positions[j+1][1];positions[j][2] = positions[j+1][2];positions[j+1][0] = tx;positions[j+1][1] = ty;positions[j+1][2] = tidx;}}}}public void sortX(){for(int i=0;i<DISPLAY_NUMBER -1 ;i++){for(int j=0;j<DISPLAY_NUMBER-i-1;j++){int x = positions[j][0];int x2 = positions[j+1][0];if(x<x2){int tx = positions[j][0];int ty = positions[j][1];int tidx = positions[j][2];positions[j][0] = positions[j+1][0];positions[j][1] = positions[j+1][1];positions[j][2] = positions[j+1][2];positions[j+1][0] = tx;positions[j+1][1] = ty;positions[j+1][2] = tidx;}}}}public void left(){int maxV = (DISPLAY_NUMBER/2)*MARGIN;if(pox[0]!=maxV){isLeft = true;stopThread = false;new Animation().start();}}public void right(){int maxV = (DISPLAY_NUMBER/2)*MARGIN;if(pox[DISPLAY_NUMBER-1]!=maxV){isLeft = false;stopThread = false;new Animation().start();}}public void move(int x){}public static void main(String[] args) {new WinMain();}public void draw(Graphics g){final int width = 120;final int height = 80;final int width2 = width/2;final int height2 = height/2;for(int i=0;i<DISPLAY_NUMBER;i++){int x = positions[i][0];int y = positions[i][1];int idx = positions[i][2];g.drawImage(mImages[idx], x+360 - width2, y+220 - height2,width,height,null);}}Object lock = new Object();class Animation extends Thread{final int start =  -(DISPLAY_NUMBER/2) * MARGIN;final int end = DISPLAY_NUMBER/2 * MARGIN;public void run() {synchronized (lock) {for(int idx=0;idx<MARGIN && !stopThread;idx++){//sortX();for(int i=0;i<DISPLAY_NUMBER;i++){int x = positions[i][0];int imgIdx = positions[i][2];if(isLeft){if(x-1>=start){int v = pox[imgIdx];x--;if(v>0){x++;pox[imgIdx]--;}}else{//x = end;pox[imgIdx]++;}}else{if(x+1>end){//x = start;pox[imgIdx]++;}else{int v= pox[imgIdx];x++;if(v>0){x--;pox[imgIdx]--;}}}positions[i][0] = x;positions[i][1] = (int) getY(x);//System.out.println("IDX:"+i +" X="+positions[i][0]+",Y="+positions[i][1]);}//System.out.println("===================="+idx+"=======================");sortY();jp.updateUI();try{Thread.sleep(5);}catch(Exception e){e.printStackTrace();}}stopThread=true;System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<");for(int i=0;i<pox.length;i++){System.out.println(pox[i]);System.out.println("X:"+positions[i][0]+" Y:"+positions[i][1]);}System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>");}};}class Jpan extends JPanel {public void paint(Graphics g) {super.paint(g);drawBackground(g);draw(g);}}public void drawBackground(Graphics g){if(bufferImage ==null){bufferImage = new BufferedImage(800, 500, BufferedImage.TYPE_INT_ARGB);Graphics bg=bufferImage.getGraphics();for(int i=0;i<bufferImage.getHeight();i++){bg.setColor(new Color(0.0f, 0.0f, 0.0f, (float) (1.0f-i*0.002)));bg.drawLine(0, i, this.getWidth(), i);}}g.drawImage(bufferImage, 0, 0, null);}static Image [] getImages(){String path = "E:\\images";File[] fileList = new File(path).listFiles();Image [] images = null;if(fileList !=null){images = new Image[fileList.length];}for(int i=0;fileList != null &&i<fileList.length ;i++){images[i]=Toolkit.getDefaultToolkit().createImage(fileList[i].getPath());}return images;}public float getY(float x){float a;float b = 4;if(x<0){a = 0.35f;}else{a = -0.35f;}float y = a*x +b;return y;}MouseMotionListener mouseMotionListener = new MouseMotionListener() {@Overridepublic void mouseMoved(MouseEvent e) {move(e.getX());}@Overridepublic void mouseDragged(MouseEvent e) {}};MouseListener mouseListener = new MouseListener() {@Overridepublic void mouseReleased(MouseEvent e) {}@Overridepublic void mousePressed(MouseEvent e) {}@Overridepublic void mouseExited(MouseEvent e) {}@Overridepublic void mouseEntered(MouseEvent e) {}@Overridepublic void mouseClicked(MouseEvent e) {if(e.getX()> WinMain.this.getWidth()/2){System.out.println("Right");right();}else{System.out.println("Left");left();}}};}

?

读书人网 >移动开发

热点推荐