⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motioncomponent.java

📁 fantastic j2me user interface designer for midp2.0 cldcd 1.1. Works on many phones as a generic appl
💻 JAVA
字号:
package com.sun.me.web.sample.local;import com.sun.lwuit.Image;import com.sun.lwuit.Component;import com.sun.lwuit.Graphics;import com.sun.lwuit.geom.Dimension;import com.sun.lwuit.plaf.Style;import com.sun.lwuit.Display;import com.sun.lwuit.animations.Motion;/** * A component that allows us to drag an image file with a physical drag motion * effect. * * @author Shai Almog */public class MotionComponent extends Component {    private Image img;    private int positionX;    private int positionY;    private Motion motionX;    private Motion motionY;    private int destX;    private int destY;    private static final int TIME = 800;    private static final int DISTANCE_X = Display.getInstance().getDisplayWidth() / 3;    private static final int DISTANCE_Y = Display.getInstance().getDisplayHeight() / 3;    private int dragBeginX = -1;    private int dragBeginY = -1;    private int dragCount = 0;        public MotionComponent(Image img) {        this.img = img;    }        protected Dimension calcPreferredSize() {        Style s = getStyle();        return new Dimension(img.getWidth() + s.getPadding(LEFT) + s.getPadding(RIGHT),             img.getHeight() + s.getPadding(TOP) + s.getPadding(BOTTOM));    }        public void initComponent() {        getComponentForm().registerAnimated(this);    }        public void paint(Graphics g) {        Style s = getStyle();        g.drawImage(img, getX() - positionX + s.getPadding(LEFT), getY() - positionY + s.getPadding(TOP));    }        public void keyPressed(int keyCode) {        super.keyPressed(keyCode);        switch(Display.getInstance().getGameAction(keyCode)) {            case Display.GAME_DOWN:                destY = Math.min(destY + DISTANCE_Y, img.getHeight() - Display.getInstance().getDisplayHeight());                motionY = Motion.createSplineMotion(positionY, destY, TIME);                motionY.start();                break;            case Display.GAME_UP:                destY = Math.max(destY - DISTANCE_Y, 0);                motionY = Motion.createSplineMotion(positionY, destY, TIME);                motionY.start();                break;            case Display.GAME_LEFT:                destX = Math.max(destX - DISTANCE_X, 0);                motionX = Motion.createSplineMotion(positionX, destX, TIME);                motionX.start();                break;            case Display.GAME_RIGHT:                destX = Math.min(destX + DISTANCE_X, img.getWidth() - Display.getInstance().getDisplayWidth());                motionX = Motion.createSplineMotion(positionX, destX, TIME);                motionX.start();                break;            default:                return;        }    }        public void pointerDragged(int x, int y) {        if(dragBeginX == -1) {            dragBeginX = x;            dragBeginY = y;        }        positionX = Math.max(0, Math.min(positionX + x - dragBeginX, img.getWidth() - Display.getInstance().getDisplayWidth()));        positionY = Math.max(0, Math.min(positionY + y - dragBeginY, img.getHeight() - Display.getInstance().getDisplayHeight()));        dragCount++;    }    public void pointerReleased(int x, int y) {        // this is a result of a more significant drag operation, some VM's always        // send a pointerDragged so we should ignore too few drag events        if(dragCount > 4) {            float velocity = -0.2f;            if(dragBeginX < x) {                velocity = 0.2f;            }            motionX = Motion.createFrictionMotion(positionX, velocity, 0.0004f);            motionX.start();                        if(dragBeginY < y) {                velocity = 0.2f;            } else {                velocity = -0.2f;            }            motionY = Motion.createFrictionMotion(positionY, velocity, 0.0004f);            motionY.start();        }        dragCount = 0;        dragBeginX = -1;        dragBeginY = -1;    }        public boolean animate() {        boolean val = false;        if(motionX != null) {            positionX = motionX.getValue();            if(motionX.isFinished()) {                motionX = null;            }            // velocity might exceed image bounds            positionX = Math.max(0, Math.min(positionX, img.getWidth() - Display.getInstance().getDisplayWidth()));            val = true;        }        if(motionY != null) {            positionY = motionY.getValue();            if(motionY.isFinished()) {                motionY = null;            }            positionY = Math.max(0, Math.min(positionY, img.getHeight() - Display.getInstance().getDisplayHeight()));            val = true;        }        return val;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -