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 obtener la vista raíz de la aplicación Android de React Native?
  • Multi-nivel ExpandableListView en Android
  • Android: WebView no puede mostrar el signo de porcentaje '%'
  • Extensible lista-vista de Android, establecer personalizado drawables
  • Registrarse en la transmisión local dentro de una vista personalizada
  • Mantener la posición de desplazamiento en RecyclerViews anidados
  • Problema de estilo al superponer getDropDownView en ArrayAdapter
  • Mantener un seguimiento de la vista agregada a WindowManager (no función findViewById ()?)
  • Vista web de Android ui
  • ¿Cómo se basan las coordenadas de un Android onTouchEvent MotionEvent?
  • Cabezal / artículo pegajoso en la vista de reciclaje
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.