-1

我正在使用此代码在屏幕中移动一个按钮,但是当我到达两侧时,它正在移出屏幕。

    private float mPrezX, mPrevY;

    private static final int MAX_CLICK_DURATION = 200;
    private long startClickTime;

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        int action = event.getActionMasked();

        Button gvup = (Button)findViewById(R.id.giveup);
        gvup.setBackground(getResources().getDrawable(R.drawable.btn));

        switch (action ) {
            case MotionEvent.ACTION_DOWN: {
                mPrevX = view.getX() - event.getRawX();
                mPrevY = view.getY() - event.getRawY();
                startClickTime = Calendar.getInstance().getTimeInMillis();//!!
                gvup.setBackground(getResources().getDrawable(R.drawable.btn1));
                break;
            }
            case MotionEvent.ACTION_MOVE:
            {
                view.animate()
                    .x(event.getRawX() + mPrevX)
                    .y(event.getRawY() + mPrevY)
                    .setDuration(0)
                    .start();

                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;
    }

如果按下它,我也会更改它的背景颜色并使其可点击。

在此处输入图像描述

我需要将该按钮保留在布局中。

我也尝试过这个这个链接,但是这两种方法都会导致在移动到两侧时挤压按钮。

请帮忙。提前致谢。

在此处输入图像描述

4

1 回答 1

0

那么您需要获取它的 X 位置并将其宽度添加到它以查看“右”边缘的位置并比较它是否大于或等于您的视口宽度。我有一段时间没有写 JAVA 了,但这应该可以解决问题。

你在检查它的位置吗?

也许

int rightEdge = currentPos.X + itsWidth;
if(rightEdge >= screenWidth) // something here

也许在您的 animate() 方法中进行检查。我很难猜测是什么导致了这种情况发生。什么是触发事件?event.getRawX() 等于什么?那是屏幕上的触摸点吗?选择点后是否制作动画?或者你可以定义一个最小/最大 x 和最小/最大 y,而不是让你的圈子过去。

            view.animate()
                if( .x(event.getRawX() + mPrevX) > screenWidth ){
                       .x(screenwidth - circleWidth)
                } // do the same for the Y - must check the max and min for both Y and X
                .x(event.getRawX() + mPrevX)
                .y(event.getRawY() + mPrevY)
                .setDuration(0)
                .start();
于 2016-03-28T23:39:58.487 回答