¿Cómo puedo crear una vista de contenedor personalizada en Android?

Me gustaría crear una vista con un oyente que actúa como una especie de contenedor o bolsa de supermercado. Cualquier imagen o texto que se arrastra en él, se recoge y se guarda en una base de datos local. O bien, el nombre de la imagen o la cadena se guarda. He creado vistas personalizadas antes de que se muestra una fila personalizada de datos, pero no estoy seguro de cómo crear una "bolsa de supermercado" tipo de vista. He buscado en Google la creación de una vista de contenedor personalizada con el oyente, pero no pude encontrar nada relacionado con lo que estoy buscando. No estoy pidiendo a nadie que lo haga por mí, sólo me dan algunos consejos o empujar en la dirección correcta.

Editar Sólo para aclarar un poco más. Ya sé cómo arrastrar y soltar una vista. El problema con eso es que se puede caer en cualquier lugar. Lo que quiero es una visión de que cuando algo se deja caer dentro de sus límites, obtiene la cadena o etiqueta de las vistas. Independientemente de qué tipo de visión que pueda ser. De alguna manera esta vista personalizada tiene que saber qué tipo de vista se dejó caer dentro de sus límites y eliminar esa vista en la gota.

2 Solutions collect form web for “¿Cómo puedo crear una vista de contenedor personalizada en Android?”

<view class="at.calista.quatscha.views.SwipebarLayout" android:id="@+id/sbl" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- Top View --> <Button android:text="Top" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <!-- Bottom View --> <Button android:text="Bottom" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

Necesitará un método que determine si se superponen dos vistas. Por ejemplo, algo así como estos métodos podrían funcionar cuando la vista de destino y la vista de elementos arrastrados son 2 vistas distintas en la misma vista de contenedor:

 private Rect getScreenBounds(View view) { int[] location = new int[2]; view.getLocationOnScreen(location); return new Rect(location[0], location[1], location[0] + view.getWidth(), location[1] + view.getHeight()); } private boolean doViewsIntersect(View dropTarget, View item) { Rect dropRect = getScreenBounds(dropTarget); Rect itemRect = getScreenBounds(item); return Rect.intersects(dropRect, itemRect); } 

Sin embargo, si las vistas que se arrastran son vistas secundarias en un contenedor y ese contenedor tiene un área especial de resultados en la que desea realizar la lógica de caída, sólo puede usar el Rect del área Rect para la prueba de intersección.

Para guardar información en la View , tiene algunas opciones:

  • Puede utilizar view.setTag(key, object) y view.getTag(key) para almacenar la información que desee en cada elemento.
  • Si está utilizando una clase personalizada para los elementos, sólo puede agregar un método para obtener los datos de la clase de vista.
  • Si está utilizando varias clases diferentes para los elementos, podría crear una interfaz e implementar esa interfaz en cada clase de vista arrastrable.

En el lanzamiento de un artículo, puede comprobar si las áreas / vistas se cruzan y, si lo hacen, obtenga la información que necesite del elemento arrastrado para procesar según sea necesario, utilizando getTag o el método agregado a la vista.

Por ejemplo, esto podría ser activado a través de un onTouchListener , cuando reciba un evento MotionEvent.ACTION_UP . He aquí un ejemplo de un oyente que puede agregar en cada elemento:

 item.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getActionMasked() == MotionEvent.ACTION_UP) { if (doViewsIntesect(dropTarget, v)) { Object data = v.getTag(DATA_KEY); //process data ((ViewGroup) v.getParent()).removeView(v); // to remove the item afterwards } } return false; } }); 
  • ¿WebView no carga datos?
  • Error al importar com.google.android.gms. *;
  • El desplazamiento de la vista web de Android no funciona
  • No se encontraron propiedades key.store y key.alias en build.properties
  • Cómo establecer el ancho de la pestaña en el diseño de la pestaña?
  • Error de importación de Eclipse con Facebook .jar?
  • Abrir un cuadro de diálogo de entrada en Android
  • Prueba onActivityResult ()
  • ¿Cómo utilizar actividades o fragmentos en un flujo de trabajo de varias pantallas?
  • Acceso a google maps en el emulador android
  • Prueba Espresso NestedScrollView - "Error al ejecutar 'desplazamiento a' en vista 'con id:"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.