2011-07-04 11 views
9

Powiedzmy, mam Android ListView że załączeniu OnItemClickListener do:Uzyskanie kliknięcie współrzędne w Android ListView OnItemClickListener

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

Kiedy pewien element w widoku kliknięciu, mogę wymyślić odpowiedni prostokąt uzyskanie wymiarów view. Chciałbym jednak uzyskać jeszcze dokładniejsze współrzędne, aby zidentyfikować punkt na ekranie, który użytkownik kliknął.

Niestety, interfejs API OnItemClickListener nie wydaje się ujawniać tych informacji. Czy są jakieś alternatywne sposoby zdobycia tego detalu (bez dumnego odkrywania koła poprzez zaimplementowanie mojego własnego ListView)?

Odpowiedz

19

Potrzebowałem tego również zrobić. Ustawiłem OnTouchListener i OnItemClickListener na ListView. Detektor dotykowy jest uruchamiany jako pierwszy, więc możesz go użyć do ustawienia zmiennej, którą następnie uzyskasz za pomocą onItemClick(). Ważne jest, aby funkcja onTouch() zwracała wartość false, w przeciwnym razie zostanie pobrane dotknięcie. W moim przypadku potrzebowałem tylko współrzędnej 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

Dzięki, wygląda dobrze! –

+0

To jest dobre rozwiązanie. Dzięki. – MattD