每当设置一个可移动的按钮时,它就不会在android中被点击
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每当设置一个可移动的按钮时,它就不会在android中被点击相关的知识,希望对你有一定的参考价值。
每当设置一个可移动的按钮时,它就变得不可点击了。我可以移动按钮但是通过按钮单击调用的功能不起作用。我在xml文件中设置了android:onClick =“playGame”,并在类中定义了playGame函数。但它不起作用。
如果我删除为可移动按钮编写的代码,它的工作正常。
为可移动按钮编写的代码是
@Override
public boolean onTouch(View view, MotionEvent event) {
float currX,currY;
int action = event.getAction();
switch (action ) {
case MotionEvent.ACTION_DOWN: {
mPrevX = event.getX();
mPrevY = event.getY();
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);
break;
}
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
代码适用于移动按钮,但按钮变得无法点击。
答案
我认为你应该区分移动点击你的onTouchEvent()
:
@Override
public boolean onTouch(View view, MotionEvent event) {
private static final int MAX_CLICK_DURATION = 200;//!!
private long startClickTime; //!!
...
switch (action ) {
case MotionEvent.ACTION_DOWN: {
startClickTime = Calendar.getInstance().getTimeInMillis();//!!
...
}
case MotionEvent.ACTION_MOVE:
{
...
}
case MotionEvent.ACTION_CANCEL:
break;
case MotionEvent.ACTION_UP:
long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
if(clickDuration < MAX_CLICK_DURATION) {
//click event has occurred
}
break;
}
return true;
}
另一答案
您可以使用手势检测器来分离逻辑。
GestureDetector gestureDetector = new GestureDetector(this,new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent event) {
return true;
}
});
your_button_view.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
if (gestureDetector.onTouchEvent(arg1)) {
// single tap
return true;
} else {
// your code for move and drag
}
return false;
}
});
以上是关于每当设置一个可移动的按钮时,它就不会在android中被点击的主要内容,如果未能解决你的问题,请参考以下文章
如何为可移动的浮动按钮设置 onTouch 和 onClick 功能