Jak korzystać z widoku.OnTouchListener zamiast onClick
Rozwijam aplikację na Androida 2.2.2 Dla Klienta i chce wykonać następujące czynności:
Teraz mam przycisk z Zdarzenie onClick, ale on nie lubi, chce dectect, gdy użytkownik zwolni przycisk.
Znalazłem widok.OnTouchListener który myślę, że to jest to, co muszę użyć, ale czy istnieje możliwość dodania tego zdarzenia do xml, jak zrobiłem z onClick?
<ImageButton
android:id="@+id/btnSaveNewGate"
android:layout_width="@dimen/btnSaveNewGate_width"
android:layout_height="@dimen/btnSaveNewGate_height"
android:layout_below="@+id/radioGrGateType"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
android:background="@null"
android:contentDescription="@string/layout_empty"
android:onClick="onSaveNewGateClick"
android:scaleType="fitXY"
android:src="@drawable/save_gate_selector" />
Mam jeszcze dwa pytania:
Które jest zdarzeniem skojarzonym, gdy użytkownik uwalnia palec?
Czy są jakieś wytyczne, które zabraniają używania View.OnTouchListener
zamiast onClick
?
3 answers
Zdarzenie, gdy użytkownik zwolni palec, to MotionEvent.ACTION_UP
. Nie wiem, czy są jakieś wytyczne, które zabraniają używania widoku.OnTouchListener zamiast onclick(), najprawdopodobniej zależy to od sytuacji.
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
// Do what you want
return true;
}
return false;
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-27 15:12:21
Przypuszczalnie, jeśli ktoś chce używać OnTouchListener
zamiast OnClickListener
, potrzebna jest dodatkowa funkcjonalność OnTouchListener
. Jest to odpowiedź uzupełniająca, aby pokazać więcej szczegółów na temat tego, jak można użyć OnTouchListener
.
Define the listener
Umieść to gdzieś w swojej aktywności lub fragmencie.
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
Set the listener
Ustaw słuchacza w onCreate
(dla aktywności) lub onCreateView
(dla Fragment).
myView.setOnTouchListener(handleTouch);
Uwagi
-
getX
igetY
podają współrzędne względem widoku(czyli lewego górnego rogu widoku). Będą one negatywne, gdy poruszasz się powyżej lub po lewej stronie widoku. UżyjgetRawX
igetRawY
, jeśli chcesz mieć bezwzględne współrzędne ekranu. - możesz użyć wartości
x
iy
, aby określić takie rzeczy, jak kierunek przesunięcia.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-20 07:59:39
OnClick jest uruchamiany, gdy użytkownik zwolni przycisk. Ale jeśli nadal chcesz używać TouchListener musisz dodać go w kodzie. Tylko:
myView.setOnTouchListener(new View.OnTouchListener()
{
// Implementation;
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-27 15:07:00