Ich habe eine benutzerdefinierte Ansicht, die FrameLayout
erweitert und ScaleGestureDetector.OnScaleGestureListener
implementiert. Diese Ansicht ist, wie der Klassenname andeutet, zoombar + pannierbar. Heres die Klasse für benutzerdefinierte Ansichten: Ссылка
Ich habe versucht, einen Weg zu finden, um lange Klicks auf diese Ansicht zu erkennen. Ich weiß, dass ich normalerweise so etwas in der Aktivität machen könnte:
%Vor%Damit ist die Ansicht nicht mehr zoombar, vermutlich weil sie alle onTouch-Ereignisse statt der Implementierung innerhalb der Views-Klasse abfängt.
Also meine Frage ist, was ist der sauberste Weg, um lange Klicks auf diese Ansicht zu erkennen?
Zunächst müssen Sie den Touch Slop verwenden, um zwischen der tatsächlichen Bewegung und der unbeabsichtigten Bewegung des Benutzerfingers zu unterscheiden (siehe ACTION_MOVE). Zweitens, wenn Sie FrameLayout
erweitern, ist es einfacher, onTouchEvent
anstelle von this.setOnTouchListener
in init()
zu überschreiben.
Fügen Sie Variablen zu Ihrer benutzerdefinierten Ansicht hinzu:
%Vor% Innerhalb init()
:
In switch-Anweisung:
%Vor%Jetzt funktionieren alle drei Funktionalitäten.
Wenn der Punkt des langen Klicks erforderlich ist, erstellen Sie eine abstrakte Klasse, die Runnable
mit den Floats x und y implementiert, und füllen Sie sie in ACTION_DOWN
, und verwenden Sie dann die Koordinaten in run()
Ich hatte einen Pinch-Zoom-Kreis, auf dem ich den normalen Klick und langen Klick erkannt habe. Code-Snippet ist unten angegeben. In diesem habe ich einen langen Klick und einen normalen Klick nach dem Zeitintervall zwischen MotionEvent.ACTION_DOWN und MotionEvent.ACTION_UP festgestellt.
Darf ich Ihnen helfen?
%Vor%Ok, tut mir leid, ich habe dein Problem überhaupt nicht verstanden. Jetzt in deiner MainActivity:
%Vor%Überschreiben Sie dann in Ihrer Hauptklasse onTouchEvent ()
%Vor%Tags und Links android android-view android-custom-view