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; }
- Cómo eliminar el espacio específico entre el padre y el niño en un ExpandableListView
- ¿Cómo puedo ver que View se vuelve visible
- Cambios en una página web a través de JavaScript que no aparecen en WebView. ¿Hay una manera de forzar el WebView para volver a dibujar su contenido?
- imagen de ajuste de androide en imagen
- SurfaceView con vista previa de cámara no se destruye
- Surface - dequeueBuffer failed (Error desconocido 2147483646)
- Agregar vista al grupo de vistas xml existente en el código
- Calidad de la animación de rotación de Android
- Android Webview goback () problema con el método loadDataWithBaseURL
- Android WebView no sólo de vídeo audio
- Android: icono del indicador de cambio y tamaño de la lista expandible utilizada para la navegación
- Custom ExpandableListview Android
- Android ClassCastException al recuperar Vista personalizada
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