7

Seine ziemlich einfache Sache, die ich tue, ich habe es vorher getan, aber jetzt läuft es nicht so, wie ich erwartet habe. Lassen Sie mich erklären Anyways kurz, was ich zu tun versuchen, und was ich bin immer ::onTouch gibt seltsame Berührungspunkte Android

Szenario :: Ich habe einen RelativeLayout, in dem ein ImageView platziert ist, jetzt habe ich die touchlistener wie folgt festgelegt: imageview.setOnTouchListener(this);

Es hat mich gebeten, die onTouch(View v,MotionEvent event) Funktion außer Kraft zu setzen, die ich habe ... und in der Action_Move bekomme ich die x und y und fügen sie sie und oberen Ränder nach links, auf diese Weise habe ich das Bild bewege.

Sonderbare Problem: Mein ImageView ist bewegend, aber mit einem sehr auffällig schütteln, wie wenn ich in der richtigen Richtung bewege, ImageView nach rechts gehen, sondern auf dem Weg nach links kommt es zurück, so dass es aussieht wie Bild ist nicht stabil, es vibriert .. etwas wie das .. Ich gebe die x und y die ich während log bekommen ... hoffe, das gibt Ihnen die Idee.

ACTION_DOWN[#0(pid 0)=160,233] Going right.. 
ACTION_MOVE[#0(pid 0)=160,233] //// 
ACTION_MOVE[#0(pid 0)=160,233] // 
ACTION_MOVE[#0(pid 0)=174,231] // 
ACTION_MOVE[#0(pid 0)=176,233] // 
ACTION_MOVE[#0(pid 0)=196,232] // 
ACTION_MOVE[#0(pid 0)=152,232] // suddenly i got 152 as location for x... image comes  back 
ACTION_MOVE[#0(pid 0)=167,232] // again started to go right 
ACTION_MOVE[#0(pid 0)=180,233] // going right 
ACTION_MOVE[#0(pid 0)=173,233] // again comes a little back 
ACTION_MOVE[#0(pid 0)=187,232] // same thing goes till end.. 
ACTION_MOVE[#0(pid 0)=159,232] 
ACTION_MOVE[#0(pid 0)=174,231] 
ACTION_MOVE[#0(pid 0)=177,233] 
ACTION_MOVE[#0(pid 0)=189,231] 
ACTION_MOVE[#0(pid 0)=155,232] 
ACTION_MOVE[#0(pid 0)=171,231] 
ACTION_MOVE[#0(pid 0)=183,230] 
ACTION_MOVE[#0(pid 0)=161,234] 
ACTION_MOVE[#0(pid 0)=171,233] 
ACTION_MOVE[#0(pid 0)=174,230] 
ACTION_MOVE[#0(pid 0)=183,230] 
ACTION_MOVE[#0(pid 0)=162,234] 
ACTION_MOVE[#0(pid 0)=170,233] 
ACTION_MOVE[#0(pid 0)=176,233] 
ACTION_MOVE[#0(pid 0)=165,233] 
ACTION_MOVE[#0(pid 0)=175,232] 
ACTION_MOVE[#0(pid 0)=163,233] 
ACTION_MOVE[#0(pid 0)=171,233] 
ACTION_MOVE[#0(pid 0)=167,233] 
ACTION_MOVE[#0(pid 0)=172,232] 
ACTION_MOVE[#0(pid 0)=178,232] 
ACTION_MOVE[#0(pid 0)=158,234] 
ACTION_MOVE[#0(pid 0)=170,234] 
ACTION_MOVE[#0(pid 0)=170,232] 
ACTION_MOVE[#0(pid 0)=177,231] 
ACTION_MOVE[#0(pid 0)=157,234] 
ACTION_MOVE[#0(pid 0)=160,234] 
ACTION_MOVE[#0(pid 0)=169,232] 
ACTION_MOVE[#0(pid 0)=165,233] 
ACTION_MOVE[#0(pid 0)=167,233] 
ACTION_MOVE[#0(pid 0)=159,233] 
ACTION_UP [#0(pid 0)=161,233] 

XML-Code für RelativeLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#99000000"> 

    <ImageView 
     android:id="@+id/imageview" 
     android:layout_width="400dp" 
     android:layout_height="400dp" 
     android:layout_marginLeft="100dp" 
     android:layout_marginTop="100dp" 
     android:scaleType="matrix" /> 
</RelativeLayout> 

Also, das ist der höchste, ich meine Frage erklären konnte, immer noch, wenn Sie etwas brauchen, lassen Sie es mich wissen.

Update :: -Code zum Bewegen der ImageView in seinem Container d.h RelativeLayout:

case MotionEvent.ACTION_MOVE: 
      LayoutParams params = (LayoutParams) imageview.getLayoutParams(); 

      params.leftMargin = params.leftMargin + x; 
      params.topMargin = params.topMargin + y; 

      imageview.setLayoutParams(params); 
      break; 

Antwort

5

Die X- und Y-Variablen in onTouch sind die X- und Y in Bezug auf die Ansicht, die die onTouchListener hat angebracht. also 10, 10 wäre von oben links von deiner ImageView nicht von der RelativeLayout.

Wenn Sie diese Werte verwenden, um Ihre ImageView zu verschieben, werden Sie natürlich wackeliges Verhalten bekommen, jede Bewegung wird auch ein etwas anderes OnTouchEvent auslösen, das eine andere Bewegung verursacht - diese Rekursion gibt Ihnen einen "vibrierenden" Effekt.

+0

"Jede Bewegung wird auch ein etwas anderes OnTouchEvent auslösen, was eine andere Bewegung verursacht - diese Rekursion gibt Ihnen einen" vibrierenden "Effekt." Bitte erläutern Sie es ein wenig, ein Link/Dokumentation wäre sehr hilfreich, wo es im Detail geschrieben wurde ... – Farhan

0

Wenn ich die Y-Koordination durch die Methode event.getRawY() statt event.getY() erhalten, um eine Ansicht zu verschieben, verschwindet das wackelige Verhalten. Also, wenn Sie die getY() Methode verwendet haben, versuchen Sie es zu ändern.