2011-05-03 18 views
10

Estoy buscando capturar las coordenadas del evento táctil de los usuarios (para esto implementé el método onTouch), pero también quiero mostrar un menú contextual cuando el usuario toca la pantalla.usando onTouch y onCreateContextMenu al mismo tiempo

Cuando se utilizan los métodos onTouch y onCreateContextMenu, cada evento táctil se envía al método onTouch. El método onCreateContextMenu nunca se llama. Supongo que esto es esperado. Luego traté de mostrar manualmente el menú contextual llamando al openContextMenu(v) en el método onTouch, esto funciona, pero el menú no desaparece de la pantalla después de la llamada onContextItemSelected(MenuItem item). Entonces, ¿cómo puedo hacer que esto funcione?

@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 

Respuesta

0

debe devolver false en onTouch:

True si el oyente ha consumido el evento, en caso contrario.

0

Para mí esta solución de trabajo:

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

resto es igual

0

tratar de poner esto en onTouch booleano pública después de la vuelta verdad; registerForContextMenu (this.getListView());

Cuestiones relacionadas