我正面临多点触控问题。问题是我可以同时触摸屏幕上的两个按钮。
我知道在这个论坛中多次询问过这个问题,唯一的解决办法就是在父布局中声明android:splitMotionEvents="false"
。但在宣布这个问题后,问题仍然存在。它是硬件的问题还是代码?这里的任何指针都很受欢迎。
答案 0 :(得分:1)
此问题似乎是因为android 4.0每个onClick都在新线程中执行。
我是如何解决的:
// 1。创建自己的点击监听器
public abstract class AbstractCarOnClickListener {
protected static volatile boolean processing = false;
protected void executeBlock() {
ActivityUtil.scheduleOnMainThread(new Runnable() {
public void run() {
processing=false;
}
}, 400);
}
}
// 2。创建监听器的子类
public abstract class AppButtonsOnClickListener extends AbstractCarOnClickListener implements View.OnClickListener {
public void onClick(View v) {
if(processing) return;
try{
processing=true;
onCarButtonClick(v);
} finally {
executeBlock();
}
}
public abstract void onCarButtonClick(View v);
}
// 3。将监听器设置为您的视图
public void onClick(View v) {
clickListener.onClick(v);
}
public OnClickListener clickListener = new AppButtonsOnClickListener(){
public void onCarButtonClick(View v) {
hintContainer.setVisibility(View.GONE);
if (v == cancelButton) {
listener.onCancelButtonClicked();
}
}
}
答案 1 :(得分:0)
这对我有用。除了在包含我把它放在MyAdapter.getView()中的按钮的每个ViewGroup上设置android:splitMotionEvents =“false”...
view.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View cell, MotionEvent event) {
// Process touches only if: 1) We havent touched a cell, or 2) This event is on the touched cell
if (mTouchedCell == null || cell.equals(mTouchedCell)) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
cell.startAnimation(mShrink);
mTouchedCell = cell;
} else if (action == MotionEvent.ACTION_CANCEL) {
if (cell.equals(mTouchedCell)) {
cell.startAnimation(mGrow);
}
mTouchedCell = null;
return true;
} else if (action == MotionEvent.ACTION_UP) {
cell.startAnimation(mFadeOut);
mTouchedCell = null;
}
return false;
}
return true;
}
});
...当然这在适配器中......
private static View mTouchedCell = null;