Umgang mit Touch-Ereignissen - onInterceptTouchEvent und onTouchEvent
Ich möchte in der Lage sein swipe irgendwo auf dem Bildschirm zum aufrufen einer bestimmten Funktion. Aber ich habe auch Buttons
im Linear Layouts
dass ich in der Lage sein wollen klicken Sie auf. Wenn ich swipe auf eine Button
ich will onInterceptTouchEvent
zu Intercept
den Aufruf der Button
's onTouchEvent
und führen Sie eine swipe-Aktion. Und wenn ich klicken Sie einfach auf eine Button
ich möchte nicht das onInterceptTouchEvent
genannt zu werden. Vielmehr möchte ich die Button
's onTouchEvent
genannt zu werden, und führen Sie eine Button click
Aber ich bekomme Fehler, wenn ich versuche, die Umsetzung onInterceptTouchEvent
.
Hier ist mein code:
public class Game extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.game_activity);
//other code....
}
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
swipeScreen(); //if action recognized as swipe then swipe
break;
case MotionEvent.ACTION_MOVE:
float x = event.getX();
float y = event.getY();
float xDelta = Math.abs(x - mLastX);
float yDelta = Math.abs(y - mLastY);
if (yDelta > xDelta) {
return true;
}
break;
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
ButtonOnClick(); //if not a swipe, then button click
return true;
}
Zuerst wird der Fehler sagt: The method onInterceptTouchEvent(MotionEvent) of type Game must override or implement a supertype method
Dann statt return true
ich den code ändern zu:return super.onInterceptTouchEvent(event)
dann bekomme ich aber eine Fehlermeldung: The method onInterceptTouchEvent(MotionEvent) is undefined for the type Activity
Kann mir bitte jemand helfen?
- Die
onInterceptTouchEvent()
- Methode ist ein Mitglied derViewGroup
Klasse. Um es zu implementieren, müssen Sie eine Unterklasse einesViewGroup
verwendet werden, die in Ihrem layout. - hm, also wie kann ich die Unterklasse meiner viewgroup? - sorry, ich bin halt neu bei android
- Danke, ich bin immer den Dreh
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten Sie, dass
onInterceptTouchEvent()
ist eine Methode aus derViewGroup
Klasse, und nicht vonActivity
.Erreichen Sie das gewünschte Verhalten, indem Sie Ihre Logik aus
onInterceptTouchEvent()
zudispatchTouchEvent(MotionEvent ev)
. Denken Sie daran rufen Sie die Oberklasse der Implementierung desdispatchTouchEvent(MotionEvent ev)
um die Ereignisse zu behandeln, die behandelt werden muss normalerweise.Beachten Sie auch, dass Sie berücksichtigen sollten, eine Bewegung zu werden, die einen streichen nur, wenn das delta größer ist als die system Konstante für touch-slop. Und ich schlage vor, machen Sie sicher, dass der Benutzer Swipe in die Richtung, die Sie wollen, indem Sie testen
yDelta /2 > xDelta
stattyDelta > xDelta
.Benutze ich fernandohur Ansatz (Lesen Sie seine post), das ist sehr wiederverwendbare, in sich geschlossene und gibt alles, was benötigt, um zu erkennen, streichen in jeder Richtung.
Verwenden fernandohur
onSwipeListener
befolgen Sie diese einfachen Schritte. Alle code ist geschrieben in Kotlin: