触摸的运动事件在安卓中无法正常工作



我正在使用此代码来移动按钮。 正在移动,但按钮在开始移动时会向下滑动一点。触摸时,我还更改按钮的颜色。

public boolean onTouch(View view, MotionEvent event) {
        float currX,currY;
        int action = event.getAction();
        Button gvup = (Button)findViewById(R.id.giveup);
        gvup.setBackground(getResources().getDrawable(R.drawable.btn));
        switch (action ) {
            case MotionEvent.ACTION_DOWN: {
                startClickTime = Calendar.getInstance().getTimeInMillis();
                mPrevX = event.getX();
                mPrevY = event.getY();
                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            }
            case MotionEvent.ACTION_MOVE:
            {
                currX = event.getRawX();
                currY = event.getRawY();
                ViewGroup.MarginLayoutParams marginParams = new ViewGroup.MarginLayoutParams(view.getLayoutParams());
                marginParams.setMargins((int)(currX - mPrevX), (int)(currY - mPrevY),0, 0);
                RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams);
                view.setLayoutParams(layoutParams);
                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            }
            case MotionEvent.ACTION_CANCEL:
                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            case MotionEvent.ACTION_UP:
                long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                if(clickDuration < MAX_CLICK_DURATION) {
                    //click event has occurred
                    gvup.setBackground(getResources().getDrawable(R.drawable.btn));
                    giveUp();
                }
                break;
        }
        return true;
    }
}

代码应该可以正常工作,但不起作用。如果代替

mPrevY = event.getY();

我输入

mPrevY = event.getY() + 65;

移动位置对于许多移动设备都工作正常,但不是全部,对于选项卡也不是。

谢谢。

尝试在ACTION_DOWN中使用event.getRawY() , event.getRawX()而不是event.getY() , event.getX()

最新更新