7

Es bastante simple lo que estoy haciendo, lo he hecho antes, pero ahora no está funcionando como esperaba. De todas formas Permítanme explicar brevemente lo que estoy tratando de hacer y lo que estoy recibiendo ::onTouch dando puntos de contacto extraños Android

Escenario :: Tengo un RelativeLayout en el que se coloca un ImageView, Ahora me puse la touchlistener así: imageview.setOnTouchListener(this);

Se me ha pedido para anular la función onTouch(View v,MotionEvent event) lo que hice ... y en el Action_Move me da la x y y y añadirlos a la izquierda y márgenes superiores, de esta manera estoy moviendo mi imagen.

extraño problema: Mi ImageView está en movimiento, pero con un movimiento muy notable, como si me estoy moviendo en la dirección correcta, ImageView irán al lado derecho, pero en su camino se vuelve hacia el lado izquierdo para que se vea como imagen no es estable, está vibrando ... algo así ... Estoy dando el x y y que recibo durante log ... Espero que esto te dé la idea.

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] 

código XML para 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> 

Por lo tanto, este es el máximo, que podría explicar mi pregunta, aún si necesita algo, hágamelo saber.

actualización :: Código para mover el ImageView en su Container es decir RelativeLayout:

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

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

      imageview.setLayoutParams(params); 
      break; 

Respuesta

5

Las variables X e Y en onTouch son el X e Y con respecto a la opinión que tiene la onTouchListener adjunto. entonces 10, 10 sería desde la parte superior izquierda de su ImageView no del RelativeLayout.

Si usa estos valores para mover su ImageView, naturalmente obtendrá un comportamiento inestable, cada acción de movimiento también disparará un OnTouchEvent ligeramente diferente que causa otra acción de movimiento; esta recursión le da un efecto de "vibración".

+0

"cada acción de movimiento también disparará un OnTouchEvent levemente diferente causando otra acción de movimiento - esta recursión le da un efecto de" vibración ". Por favor, explíquelo un poco, un enlace/documentación sería muy útil donde se haya escrito en detalle ... – Farhan

0

Cuando obtuve la coordinación Y por el método event.getRawY() en lugar de event.getY() para mover una Vista, el comportamiento inestable desaparece. Entonces, si utilizó el método getY(), intente cambiarlo.

Cuestiones relacionadas