Cómo usar el arrastrar correctamente de una vista en android

Parece que hay un montón de soluciones de cómo utilizar el arrastrar de las vistas en android.

Sin embargo, son demasiado lentos o con errores.

Una solución conocida es tener un framelayout, y la vista simplemente cambia su layoutParams a medida que se mueve usando el OnTouchListener, como se describe aquí: http://www.anddev.org/novice-tutorials-f8/android-drag-and-drop -of-normal-views-not-bitmaps-t13404.html Sin embargo, si la vista es una imageView, al alcanzar el lado más derecho (o más inferior) del framelayout, la imagen se encoge.

Otra posible solución es usar el lienzo para mostrar el contenido arrastrado, como se describe aquí: http://www.anddev.org/basic_drag_and_drop-t3095.html sin embargo, no estoy seguro de cómo usarlo para vistas complejas.

¿Alguien sabe de una buena solución, que permite que el tamaño de la vista arrastrada permanecer el mismo, no importa dónde está en su contenedor?

por favor, ayúdame .

2 Solutions collect form web for “Cómo usar el arrastrar correctamente de una vista en android”

Esta es una solución completa para un simple arrastre de imageView:

findViewById(R.id.imageView).setOnTouchListener(new OnTouchListener() { int prevX,prevY; @Override public boolean onTouch(final View v,final MotionEvent event) { final FrameLayout.LayoutParams par=(FrameLayout.LayoutParams)v.getLayoutParams(); switch(event.getAction()) { case MotionEvent.ACTION_MOVE: { par.topMargin+=(int)event.getRawY()-prevY; prevY=(int)event.getRawY(); par.leftMargin+=(int)event.getRawX()-prevX; prevX=(int)event.getRawX(); v.setLayoutParams(par); return true; } case MotionEvent.ACTION_UP: { par.topMargin+=(int)event.getRawY()-prevY; par.leftMargin+=(int)event.getRawX()-prevX; v.setLayoutParams(par); return true; } case MotionEvent.ACTION_DOWN: { prevX=(int)event.getRawX(); prevY=(int)event.getRawY(); par.bottomMargin=-2*v.getHeight(); par.rightMargin=-2*v.getWidth(); v.setLayoutParams(par); return true; } } return false; } }); 

Estoy utilizando arrastrar y soltar en un proyecto actual, donde las diferentes View s se colocan dentro de un RelativeLayout acuerdo a LayoutParams aplicado a ellos. Al igual que usted, encontré que las vistas se "encogían" al llegar a la derecha o la parte inferior del contenedor ViewGroup . Probablemente es bastante obvio que esto sucederá, realmente, considerando que durante las fases de medición y disposición, el sistema va a determinar que una determinada View repente va a tener que tener dimensiones mucho más pequeñas de lo que realmente desea si todavía va a ser Capaz de encajar en el padre cuando se coloca cerca de los extremos.

Una solución muy simple que he hecho para evitar que en este momento es simplemente sobredimensionar mi ViewGroup relación con el tamaño de la pantalla.

Además, puede decidir que en realidad no desea que View s aparezca parcialmente fuera de la pantalla, en cuyo caso utilizaría alguna lógica de programa para evitar que los márgenes de los objetos View se configuren de tal manera que se permita que los View s se apaguen El límite del contenedor principal.

Otra solución podría ser anular onMeasure() o similar para obligar a la View secundaria a forzar un tamaño mayor que el que el padre considere disponible – si es posible – para forzar que la Vista se coloque allí en el tamaño deseado, superponiéndose el borde. Eso es sólo una idea de la parte superior de mi cabeza sin embargo y no han investigado.

  • Cómo encontrar el área de texto (altura / ancho) de TextView de forma programática en android
  • Los métodos getTop (), getLeft (), getX (), getY (), getWidth (), getHeight () de la vista de Android
  • vista de búsqueda no expandir todo el ancho
  • Cómo agregar linealmente LinearLayout con color de fondo y peso a otro diseño
  • View.getLayoutParams (). Anchura que no funciona con el turrón
  • Animación en el cambio de LayoutParams en LinearLayout
  • Android - vista de la imagen dentro de los problemas del paginador de vista
  • Expectativa de puntero nulo al configurar LayoutParams
  • android setLayoutParams para webview genera ERROR
  • GetLayoutParams (). Width VS setMax / MinimumWidth () para ImageView
  • Establecer margen en RecyclerView mediante programación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.