2011-07-04 19 views
9

Digamos, tengo una ListView Android que les adjunto un OnItemClickListener a:Obtención clic coordenadas en Android ListView OnItemClickListener

ListView listView = (ListView) findViewById(...); 
listView.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     [...] 

Cuando se hace clic en un determinado elemento de la vista, puedo averiguar el rectángulo correspondiente por obteniendo las dimensiones de view. Sin embargo, me gustaría obtener las coordenadas correspondientes con más precisión para identificar el punto en la pantalla que el usuario realmente hizo clic.

Desafortunadamente, la API OnItemClickListener no parece exponer esta información. ¿Hay alguna forma alternativa de obtener este detalle (sin reinventar orgullosamente la rueda mediante la implementación de mi propio ListView)?

Respuesta

19

Necesitaba hacer esto también. Configuré OnTouchListener y OnItemClickListener en ListView. El oyente táctil se activa primero, por lo que puede usarlo para establecer una variable a la que puede acceder desde onItemClick(). Es importante que su onTouch() devuelva falso, de lo contrario consumirá el toque. En mi caso, solo necesitaba la coordenada X:

private int touchPositionX; 

... 

getListView().setOnTouchListener(new OnTouchListener() { 
    public boolean onTouch(View view, MotionEvent event) { 
    touchPositionX = (int)event.getX(); 
    return false; 
    } 
}); 

getListView().setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
    if (touchPositionX < 100) { 
    ... 
+0

Gracias, se ve bien! –

+0

Esta es una buena solución. Gracias. – MattD

Cuestiones relacionadas