同时使用onTouch和onCreateContextMenu

我正在寻找捕捉用户触摸事件的坐标(为此,我实现了onTouch方法),但是我也想在用户触摸屏幕时显示上下文菜单。

当使用onTouchonCreateContextMenu方法时,每个触摸事件都会发送到onTouch方法。 onCreateContextMenu方法永远不会被调用。 我猜这是预料之中的。 然后我尝试通过在onTouch方法中调用openContextMenu(v)来手动显示上下文菜单,这个方法onTouch ,但是在调用onContextItemSelected(MenuItem item)之后,菜单不会从屏幕上消失。 那我该怎么做这个工作?

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.record_match); myCourtView = new MyImageView(getApplicationContext()); ll = (LinearLayout)findViewById(R.id.linearLayout); ll.addView(myCourtView, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); registerForContextMenu(myCourtView); myCourtView.requestFocus(); myCourtView.setOnTouchListener(this); }// End OnCreate // Implement the OnClickListener callback public boolean onTouch(View v, MotionEvent event) { //do something when user interacts with the court view myCourtView.processEvent(event); openContextMenu(v); myCourtView.invalidate(); return true; }//End OnClickListener @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.shot_entry_menu, menu); }//End onCreateContextMenu @Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case R.id.player_1: //do something return true; case R.id.player_2: //do something else return true; } return true; }//End onContextItemSelected 

Solutions Collecting From Web of "同时使用onTouch和onCreateContextMenu"

你应该在onTouch中返回false:

如果侦听器消耗了该事件,则返回true,否则返回false。

对我来说这个解决scheme的工作

 myCourtView.setOnTouchListener(new OnTouchListener() {public boolean onTouch(View v, MotionEvent ev) {}); 

rest是一样的

尝试把这个公共布尔onTouch后返回true; registerForContextMenu(this.getListView());