Используя onTouch и onCreateContextMenu одновременно

Я ищу для захвата координат события touch touch (для этого я реализовал метод onTouch), но также хочу отображать контекстное меню, когда пользователь коснется экрана.

Когда используются методы onTouch и onCreateContextMenu, каждое событие касания отправляется методу onTouch. Метод onCreateContextMenu никогда не вызывается. Думаю, это ожидалось. Затем я попытался вручную отобразить контекстное меню, вызвав 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

Ответ 1

вы должны вернуть false в onTouch:

Истина, если слушатель потребляет событие, в противном случае - false.

Ответ 2

Для меня это решение работает:

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

Отдых - это то же самое

Ответ 3

попробуйте поместить это в public boolean onTouch после возврата true; registerForContextMenu (this.getListView());