在做Fling时如何获得像素移动?

时间:2011-12-02 15:49:23

标签: android ontouchevent onfling

我的应用程序需要非常精确的运动测量。不是非常精确但接近它,我想如果用户将他们的手指放在屏幕上并向左或向右移动病房,假设最多100像素,我可以跟踪它。

 class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {

                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    //increament in image index & showImage()
                }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    //decrement in image index & showImage()
                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (gestureDetector.onTouchEvent(event))
            return true;
        else
            return false;
    }

实际上我有动画帧和触摸事件我想快速移动这些图像,这样用户就能够以平滑的方式看到它的3D视图,只有当我有像素到像素的轨道时才有可能。

任何人都指导我如何实现这个目标?

2 个答案:

答案 0 :(得分:0)

我不确定gestureListener是否可行。我能够使用OnTouchEvent跟踪您需要的级别:

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction() & MotionEvent.ACTION_MASK) {

    case MotionEvent.ACTION_DOWN:
        // capture start position from event
        break;

    case MotionEvent.ACTION_MOVE:
        // do something interactively
        break;

    case MotionEvent.ACTION_UP:
        // check distance between start and end postions and do something
        break;
    }
    return true; // return true if you handle event otherwise return false!
}

还有许多其他行动事件可以帮助您。

答案 1 :(得分:0)

您是否定义了SWIPE_MIN_DISTANCESWIPE_MAX_OFF_PATHSWIPE_THRESHOLD_VELOCITY? 您可以这样声明它们:

private static final int SWIPE_MIN_DISTANCE = 200;
private static final int SWIPE_MAX_OFF_PATH = 250;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

您可以根据自己的喜好更改数值。