Android 如何通过OnTouch改变晶圆厂的位置?

Android 如何通过OnTouch改变晶圆厂的位置?,android,floating-action-button,Android,Floating Action Button,我使用浮动动作按钮。当用户触摸并拖动晶圆厂时,我想更改晶圆厂的位置。我正在使用onTouchListener,但它不能很好地移动晶圆厂。 这是我的密码: final FloatingActionButton fabButton = new FloatingActionButton.Builder(this) .withDrawable(getResources().getDrawable(R.drawable.fab)) .withButtonColor(Color.WHITE)

我使用浮动动作按钮。当用户触摸并拖动晶圆厂时,我想更改晶圆厂的位置。我正在使用onTouchListener,但它不能很好地移动晶圆厂。 这是我的密码:

final FloatingActionButton fabButton = new FloatingActionButton.Builder(this)
    .withDrawable(getResources().getDrawable(R.drawable.fab))
    .withButtonColor(Color.WHITE)
    .withGravity(Gravity.BOTTOM | Gravity.RIGHT)
    .withMargins(0, 0, 16, 16)
    .create();
    fabButton.setAlpha(0.6f);
    fabButton.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub
            fabButton.setX(event.getX());
            fabButton.setY(event.getY());

            return false;
        }
    });

感谢您提前提出的建议…

问题出在
返回false
;若侦听器在finger down事件中返回false,那个么简单地说,move事件将被忽略。请尝试以下代码:

fabButton.setOnTouchListener(new View.OnTouchListener() {

        float x, y;
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()){

                case MotionEvent.ACTION_MOVE:

                    fabButton.setX(fabButton.getX() + (event.getX() - x));
                    fabButton.setY(fabButton.getY() + (event.getY() - y));
                    return true;
                case MotionEvent.ACTION_DOWN:
                    x = event.getX();
                    y = event.getY();
                    return true;
            }

            return false;
        }
    });

另外,由于
x
y
是视图左上角的坐标,您可能不希望将触摸屏的
x
y
设置为这些坐标。相反,您应该计算移动的增量并增加fab的初始坐标,正如我在上面的代码片段中指定的那样

这不适用于我。我在使用SDK的android studio 4.2 C15上30@MiguelSilva你能通过pastebin分享你的代码吗?同时,我发现了为什么我使用定制的浮动操作按钮。这段代码需要做一些调整,我也正在把它变成一个开源库。您可以在这里找到:您是否尝试在处理的切换案例中返回
true
?问题可能是,无论您在这个函数中执行什么操作,它都会返回
super.onTouchEvent()