【问题标题】:Motion event of Touch is not working properly in androidTouch的运动事件在android中无法正常工作
【发布时间】:2016-03-18 21:10:19
【问题描述】:

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

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;

移动位置适用于许多移动设备,但不是全部,也不适用于标签。

谢谢。

【问题讨论】:

    标签: android button touch motionevent movable


    【解决方案1】:

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

    【讨论】:

    • 当我开始移动它时,它会跳到上角
    • 什么意思?无论如何,如果您只想移动按钮,则不应更改边距。使用view.setX((int)(currX - mPrevX)view.setY((int)(currY - mPrevY)
    • 好吧,我的意思是更好,但并不完美......仍然有一点向下滑动,在标签中可以忽略不计,但在移动设备中可以理解。
    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2017-07-29
    • 2016-02-18
    • 2018-01-13
    • 1970-01-01
    • 2022-07-04
    • 2011-04-23
    相关资源
    最近更新 更多