Lange Klicks auf eine benutzerdefinierte Ansicht erkennen?

8

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?

    
Orbit 08.01.2016, 06:10
quelle

3 Antworten

2

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() :

%Vor%

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()

    
InTwoMinds 11.01.2016 17:07
quelle
2

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%     
Omji Mehrotra 13.01.2016 10:09
quelle
1

Ok, tut mir leid, ich habe dein Problem überhaupt nicht verstanden. Jetzt in deiner MainActivity:

%Vor%

Überschreiben Sie dann in Ihrer Hauptklasse onTouchEvent ()

%Vor%     
Alessandro Verona 08.01.2016 09:44
quelle