不移动手指

时间:2016-02-04 18:06:19

标签: android events drag-and-drop

我正在创建一个Android应用程序,在缩放图像内部提供拖放支持。当用户将手指移动到靠近屏幕边缘时,我需要平移图像。如果事件的动作是ACTION_DRAG_LOCATION,我会检查这个。

我遇到的问题是当用户的手指到达屏幕边缘并停止移动时,我的onDragListener中的onDrag()方法不会被调用。

我尝试覆盖Activity的onTouch()方法,但拖动时事件没有触发。

有人知道实现这一目标的方法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我最终创建了一个Runnable,我在onDrag方法中开始:

可运行

private Runnable runnable = new Runnable() {
    @Override
    public void run() {
        long millis = SystemClock.uptimeMillis();
        if (insideOfMe) {
            int[] locations = new int[2];
            mapAreaLayout.getLocationOnScreen(locations);
            int x = locations[0];
            int y = locations[1];
            float speed = 10;
            if (dragEvent.getX() - speed < x) {
                pinView.panTheImage(speed, 0);
            }
            if (dragEvent.getX() + speed > x + mapAreaLayout.getWidth()) {
                pinView.panTheImage(-speed, 0);
            }
            if (dragEvent.getY() - speed < y) {
                pinView.panTheImage(0, speed);
            }
            if (dragEvent.getY() + speed > y + mapAreaLayout.getHeight()) {
                pinView.panTheImage(0, -speed);
            }

        }


        handler.postAtTime(this, millis + 16);
    }
};

ondrag当

if (event.getAction() == DragEvent.ACTION_DRAG_STARTED) {
                    handler.removeCallbacks(runnable);
                    handler.post(runnable);
}

然后我删除了对Runnable的回调:

if (event.getAction() == DragEvent.ACTION_DRAG_ENDED) {
                handler.removeCallbacks(runnable);
            }