je suis en train de concevoir une télécommande graphique, mais au lieu de créer des boutons distincts pour chaque bouton de la télécommande, je souhaite obtenir une image distante prête à l'emploi et définir certaines parties cliquables. événement pour faire cela?
J'ai 2 solutions pour vos besoins. Dans les deux cas, toute l'image reste cliquable mais vous pouvez obtenir des informations sur la zone cliquée.
Solution 1:
vous pouvez masquer l'image et obtenir le pixel couleur de l'image sous-jacente. Ainsi, vous pourrez enfin savoir quelle zone a été cliquée.
ici, chaque fois que vous avez cliqué, vous pouvez vérifier la couleur de pixel de background image
et la faire correspondre à un jeu de couleurs prédéfini pour savoir quelle zone a été cliquée.
Image au premier plan:
Image de fond:
Zone cliquable:
Encore confus?
Référence: Je voudrais vous suggérer de parcourir this tutorial.
Solution 2:
vous pouvez mapper votre image avec coordonnées et vous pouvez ainsi obtenir les informations de la zone sur laquelle vous avez cliqué.
Exemple: MappedImage avec des coordonnées
si vous ne connaissez pas les coordonnées, vous pouvez créer votre image mappée à partir de ici
les coordonnées pour le Kansas ressembleront à quelque chose comme ça,
<area shape="poly" coords="243,162,318,162,325,172,325,196,244,196" id="@+id/area14" name = "Kansas"/>
Référence: S'il vous plaît jeter un oeil à Android Image Mapping .
J'espère que ça vous sera utile !!
Vous pouvez toujours utiliser des boutons.
Vous pouvez les placer sur votre image aux endroits appropriés et les rendre invisibles.
En XML
<Button Android:visibility="invisible"/>
Ou
Button mybutton = (Button) v1;
mybutton.setVisibility(View.INVISIBLE);
J'ai eu les mêmes défis et résolu avec la bibliothèque "PhotoView" , où vous pouvez écouter
onPhotoTap(View view, float x, float y){}
événements et vérifiez si l'onglet se trouve dans votre zone d'image, puis effectuez certaines tâches.
J'ai créé une bibliothèque pour aider les autres développeurs à implémenter ces fonctionnalités beaucoup plus rapidement. C'est sur Github: ClickableAreasImages
Cette bibliothèque vous permet de définir des zones cliquables dans une image, d'y associer des objets et d'écouter les événements tactiles sur cette zone.
Comment utiliser la bibliothèque:
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();
}
}
...
}
Pour améliorer la réponse de @sealz, voici ma réponse:
<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>