Событие движения Touch не работает должным образом в Android

Я использую этот код для перемещения кнопки. движение происходит, но кнопка начинает немного скользить при начале движения. Я также меняю цвет кнопки при касании.

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;

Положение движения отлично работает для многих мобильных, но не для всех, а также для вкладок.

Благодарю.

1 ответ

Попробуйте использовать event.getRawY() , event.getRawX() вместо event.getY() , event.getX() в вашем ACTION_DOWN тоже.

Другие вопросы по тегам