Vista de arrastrar androide lisa

Tengo que arrastrar algunas vistas en la pantalla. Estoy modificando su posición cambiando a la izquierda ya la parte superior de sus parámetros de diseño del evento de movimiento en ACTION_MOVE desde el oyente táctil. ¿Hay una manera de "arrastrar" los elementos más suave? Porque tis tipo de "arrastrar" no es nada liso en absoluto … Aquí está el código

public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: dx = (int) motionEvent.getX(); dy = (int) motionEvent.getY(); break; case MotionEvent.ACTION_MOVE: int x = (int) motionEvent.getX(); int y = (int) motionEvent.getY(); RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view.getLayoutParams(); int left = lp.leftMargin + (x - dx); int top = lp.topMargin + (y - dy); lp.leftMargin = left; lp.topMargin = top; view.setLayoutParams(lp); break; } return true; } 

Trate de usar motionEvent.getRawX () y motionEvent.getRawY () en lugar de getY y getX

No es necesario usar LayoutParameters para arrastrar. Puede hacerlo simplemente estableciendo las coordenadas X e Y de la vista. Puedes leer más sobre esto aquí .

Puedes hacer algo como esto.

  @Override public boolean onTouch(View view, MotionEvent event) { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: dX = view.getX() - event.getRawX(); dY = view.getY() - event.getRawY(); break; case MotionEvent.ACTION_MOVE: view.setY(event.getRawY() + dY); view.setX(event.getRawX() + dX); break; default: return false; } return true; } 

La razón del movimiento no suave es el valor entero de leftMargin y topMargin.
Para la posición de movimiento suave debe ser flotante.
Esto podría ayudar.

Sería útil ver cómo está procesando sus eventos ACTION_MOVE. ¿Está utilizando todos los puntos utilizando el método event.getHistorical ()? Si eso no le da un arrastre más suave, otra idea podría ser interpolar puntos en el camino. Creo que habrá un trade-off entre lograr suavidad de movimiento y respuesta rápida al tacto del usuario. HTH.

Usted debe redondear sus ints, también utilizando márgenes no va a ser muy suave, utilizar un diseño diferente y establecer las coordenadas X e Y de acuerdo a las dimensiones de la pantalla.

  • ¿Cómo puede saber cuándo se termina de cargar una actividad de Android?
  • alerta en la vista web incorporada
  • Cómo obtener la altura de la vista dentro del adaptador para crear bitmap de tamaño?
  • ¿Cómo ampliar la vista sin problemas en Android?
  • Ver onDraw (Canvas c) versus dibujar (Canvas c) en android?
  • Vistas duplicadas en Android durante el tiempo de ejecución
  • Lista extensible de Multichild android
  • Android Studio 2.2.0.12 diseñador automáticamente anuncios "@ + id" prefijo antes de la identificación de la vista y que causa este error inusual
  • Android: Obtener la posición de desplazamiento de un WebView
  • No se puede establecer ExpandableListView Child DividerHeight
  • A veces listView.getChildAt (int index) devuelve NULL (Android)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.