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();
}
}
...
}