我正面临多点触控问题。问题是我可以同时触摸屏幕上的两个按钮。
我知道这个问题在这个论坛上被问了好几次,唯一的解决方案是android:splitMotionEvents="false"
在你的父布局中声明。但是在宣布这一点之后,问题仍然存在。是硬件问题还是代码问题?任何指针在这里表示赞赏。
问问题
2780 次
2 回答
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();
}
}
}
于 2013-09-06T07:18:29.960 回答
0
这对我有用。除了在每个包含按钮的 ViewGroup 上设置 android:splitMotionEvents="false" 我把它放在 MyAdapter.getView()...
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;
于 2013-10-04T23:47:18.900 回答