Mam niestandardowy widok, który działa jak przycisk. Chcę zmienić tło, gdy użytkownik naciśnie go, przywrócić oryginalne tło, gdy użytkownik przesunie palec na zewnątrz lub zwolni go, a ja również chcę obsłużyć zdarzenia onClick/onLongClick. Problem polega na tym, że onTouch wymaga ode mnie zwrotu true dla ACTION_DOWN
lub nie wyśle mi zdarzenia ACTION_UP
. Ale jeśli zwrócę prawdę, detektor onClick
nie będzie działał.Android onTouch z onClick i onLongClick
Myślałem, że rozwiązałem go, zwracając wartość false w onTouch i rejestrując się onClick - jakoś zadziałało, ale było trochę przeciw dokumentom. Właśnie otrzymałem wiadomość od użytkownika, który powiedział mi, że nie może długo kliknąć przycisku, więc zastanawiam się, co jest nie tak.
Część bieżącego kodu:
public boolean onTouch(View v, MotionEvent evt)
{
switch (evt.getAction())
{
case MotionEvent.ACTION_DOWN:
{
setSelection(true); // it just change the background
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_OUTSIDE:
{
setSelection(false); // it just change the background
break;
}
}
return false;
}
public void onClick(View v)
{
// some other code here
}
public boolean onLongClick(View view)
{
// just showing a Toast here
return false;
}
// somewhere else in code
setOnTouchListener(this);
setOnClickListener(this);
setOnLongClickListener(this);
Jak mogę uczynić je współpracować poprawnie?
góry dzięki