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; }
- Tamaño del texto del hilandero Android
- ¿Diversas vistas para el artículo del hilandero y del hilandero?
- SendUserActionEvent () es null
- Agregar vista dinámica mediante WindowManager.addView
- Android View.OnKeyListener: haga clic una vez, ejecute dos veces
- Actualizar la posición de la vista debajo de otra vista en Android
- Custom Seekbar con efecto de enmascarar con dos estirables?
- WebView de Android - Dithering / Cambios al tacto
- HasStableIds () en ListView expandible?
- Borrar una imagen girada en Android no muestra borrar la ruta correcta
- Android deslizar la tarjeta con una pizca para ampliar la vista de la imagen con SwipeFlingAdapterView biblioteca
- Android WebView ZoomManager.onSizeChanged NullPointerException
- Cómo obtener el nombre de la imagen de ImageView en Android?
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 hacer que phonegap window.location.href no inicie Chrome en Android
- Android: reinicie la aplicación después de la actualización – ACTION_PACKAGE_REPLACED