当我尝试添加onTouchListner()一个按钮获取我
Button上调用了setOnTouchListener,但没有覆盖performClick
警告.谁知道怎么修它.谢谢..

btnleftclick.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
错误:
自定义视图已调用setOnTouchListener但不覆盖performClick如果覆盖onTouchEvent或使用OnTouchListener的View也未实现performClick并在检测到单击时调用它,则View可能无法正确处理辅助功能操作.理想情况下,处理点击操作的逻辑应放在View#performClick中,因为某些辅助功能服务会在发生单击操作时调用performClick.
我在开发的自定义Android视图中收到此警告(来自问题标题).
为什么我会收到警告?它背后的逻辑是什么,即为什么在
覆盖performClick时也会覆盖它onTouchEvent?
我不是在问如何处理触摸事件,而是在幕后发生了什么?如果有几个嵌套的小部件,他们看到的事件是什么顺序?开发人员是否可以控制它?理想情况下,我想要一个关于这个主题的文件.
为什么ViewGroup唯一得到ACTION_DOWN的onInterceptTouchEvent?根据文档,只要返回false,它就应该接收所有事件类型.
http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent%28android.view.MotionEvent%29
第3点.
示例代码:
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new Container(this));
}
private class Container extends LinearLayout {
public Container(Context context) {
super(context);
setBackgroundColor(0xFF0000FF);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.i(TAG, "onInterceptTouchEvent");
int action = ev.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
Log.i(TAG, "onInterceptTouchEvent.ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.i(TAG, "onInterceptTouchEvent.ACTION_MOVE");
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
Log.i(TAG, "onInterceptTouchEvent.ACTION_UP");
break;
}
return …Run Code Online (Sandbox Code Playgroud)