3

我有一个按钮(代码中的变量 theButton),并且希望能够在其父视图周围拖动它。这是它的 OnTouchListener:

    OnTouchListener touchBListener = new View.OnTouchListener() 
    {       
        public float offsetX;
        public float offsetY;

        @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            int theAction = event.getAction();
            switch (theAction)
            {
                case MotionEvent.ACTION_DOWN:
                    // Button down
                    offsetX = theButton.getX() - event.getX();
                    offsetY = theButton.getY() - event.getY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    // Button moved
                    float newX = event.getX() + offsetX;
                    float newY = event.getY() + offsetY;
                    v.setX(newX);
                    v.setY(newY);
                    break;
                case MotionEvent.ACTION_UP:
                    // Button up
                    break;
                default:
                    break;
            }
            return true;
        }
    };
    theButton.setOnTouchListener(touchBListener);

当我拖动按钮时,它会沿拖动的大致方向移动,但它会一直在其“当前”位置和拖动中较早的位置之间来回跳跃。出于某种原因,当阻力向右上方移动时,跳跃会更大。

是否可以使用 OnTouchListener 进行“平滑”拖动,还是需要使用 OnDragListener 来代替?

4

1 回答 1

6

我在另一篇文章中找到了答案——当我将event.getX()and更改event.getY()event.getRawX()andevent.getRawY()时,拖拽很顺畅。

于 2013-08-24T15:17:24.013 回答