如何创建一个不会移出屏幕的可移动按钮

时间:2016-03-28 23:25:04

标签: android button movable

我正在使用此代码在屏幕上移动按钮,但当我到达侧面时,它正在移出屏幕。

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

如果按下它我也会改变它的背景颜色并且也可以点击它。

enter image description here

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

我还尝试了thisthis链接,但这两种方法都会在移到侧面时挤压按钮。

请帮忙。 提前谢谢。

enter image description here

1 个答案:

答案 0 :(得分:0)

嗯,你需要获得它的X位置并将其宽度添加到它,以查看&#34;右边&#34; edge is并比较它是否大于或等于视口的宽度。我有一段时间没有写过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();