studio programacion herramientas fundamentos con avanzado aplicaciones android onclicklistener imagemap

programacion - manual de android en pdf



área seleccionable de la imagen (4)

Estoy diseñando un control remoto de GUI, pero en lugar de hacer botones separados para cada botón remoto, quiero obtener una imagen remota completa y configurar ciertas partes de ella con capacidad de hacer clic. ¿Hay alguna manera más que el evento de movimiento para hacer esto?


Aún puedes usar botones.

Puede colocarlos sobre su imagen en los lugares correctos y hacerlos invisibles.

En XML

<Button android:visibility="invisible"/>

O

Button mybutton = (Button) v1; mybutton.setVisibility(View.INVISIBLE);


Mejorando la respuesta de @sealz, aquí mi respuesta:

<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_centerInParent="true" android:layout_alignTop="@+id/mail" android:layout_alignBottom="@+id/mail" > <Button android:id="@+id/leftMail" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".5" android:background="@android:color/transparent" /> <Button android:id="@+id/rightMail" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight=".5" android:background="@android:color/transparent" /> </LinearLayout> <ImageView android:id="@+id/mail" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/mail1600x600" android:layout_centerInParent="true" /> </RelativeLayout>


Tengo 2 soluciones para su requisito. En ambas, toda la imagen permanece activable pero puede obtener información sobre el área en la que se hace clic.

Solución 1:

puede enmascarar la imagen y obtener el color de píxel de la imagen que se encuentra debajo. Así, en última instancia, puede llegar a saber en qué área se ha hecho clic.

aquí, cada vez que se presiona, se puede verificar el color del píxel de background image de background image y hacerla coincidir con el conjunto de colores predefinidos para saber en qué área se ha hecho clic.

Imagen de primer plano:

Imagen de fondo:

Área de clic:

¿Sigo confundido?

Referencia: me gustaría sugerirle que siga this tutorial.

Solución 2:

puede mapear su imagen con coordenadas y, en consecuencia, puede obtener la información del área en la que se ha hecho clic.

Ejemplo: MappedImage con coordenadas

si no conoce las coordenadas, puede crear su imagen mapeada desde aquí

las coordenadas para Kansas se verán así:

<area shape="poly" coords="243,162,318,162,325,172,325,196,244,196" id="@+id/area14" name = "Kansas"/>

Referencia: echa un vistazo a Android Image Mapping .

Espero que sea util !!


Tuve los mismos desafíos y los resolví con la biblioteca "PhotoView" , donde puedes escuchar

onPhotoTap(View view, float x, float y){}

eventos y comprobar si la pestaña está dentro de su área de imagen, y luego realizar ciertas tareas.

Creé una biblioteca para ayudar a otros desarrolladores a implementar dicha funcionalidad mucho más rápido. Está en Github: ClickableAreasImages

Esta biblioteca le permite definir áreas clicables en una imagen, asociar objetos a ella y escuchar eventos táctiles en esa área.

Cómo usar la biblioteca:

public class MainActivity extends AppCompatActivity implements OnClickableAreaClickedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Add image ImageView image = (ImageView) findViewById(R.id.imageView); image.setImageResource(R.drawable.simpsons); // Create your image ClickableAreasImage clickableAreasImage = new ClickableAreasImage(new PhotoViewAttacher(image), this); // Initialize your clickable area list List<ClickableArea> clickableAreas = new ArrayList<>(); // Define your clickable areas // parameter values (pixels): (x coordinate, y coordinate, width, height) and assign an object to it clickableAreas.add(new ClickableArea(500, 200, 125, 200, new Character("Homer", "Simpson"))); clickableAreas.add(new ClickableArea(600, 440, 130, 160, new Character("Bart", "Simpson"))); } // Listen for touches on your images: @Override public void onClickableAreaTouched(Object item) { if (item instanceof Character) { String text = ((Character) item).getFirstName() + " " + ((Character) item).getLastName(); Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); } } ... }