Salutations,Détecter le contact sur l'image bitmap
Est-ce que quelqu'un cherche à savoir quand un utilisateur appuie sur un bitmap qui se trouve dans un canevas?
Merci
Salutations,Détecter le contact sur l'image bitmap
Est-ce que quelqu'un cherche à savoir quand un utilisateur appuie sur un bitmap qui se trouve dans un canevas?
Merci
Vous devriez travailler avec quelque chose comme ceci:
public boolean onTouchEvent(MotionEvent event){
int action = event.getAction();
int x = event.getX() // or getRawX();
int y = event.getY();
switch(action){
case MotionEvent.ACTION_DOWN:
if (x >= xOfYourBitmap && x < (xOfYourBitmap + yourBitmap.getWidth())
&& y >= yOfYourBitmap && y < (yOfYourBitmap + yourBitmap.getHeight())) {
//tada, if this is true, you've started your click inside your bitmap
}
break;
}
}
C'est un début, mais vous devez gérer case MotionEvent.ACTION_MOVE
et case MotionEvent.ACTION_UP
pour vous assurer que vous traiter correctement avec l'entrée de l'utilisateur. La méthode onTouchEvent
est appelée à chaque fois que l'utilisateur: met un doigt en bas, déplace un doigt déjà sur l'écran ou lève un doigt. Chaque fois que l'événement porte les coordonnées X et Y de l'endroit où se trouve le doigt. Par exemple, si vous voulez vérifier que quelqu'un tapote dans votre bitmap, vous devriez faire quelque chose comme définir un booléen que le contact a commencé dans le bitmap sur ACTION_DOWN, puis vérifier sur ACTION_UP que vous êtes toujours dans le bitmap.
Steve, Google a un grand article et tutoriel pour la gestion des événements de l'interface utilisateur @http://developer.android.com/guide/topics/ui/ui-events.html. C'est ce qui m'a lancé et il était super pour moi :-)
Ceci détectera une touche et vérifiera si elle n'est pas transparente. Vous en avez besoin si vos bitmaps ne sont pas des rectangles. myBitmap est juste une classe de conteneur simple que j'utilise.
private boolean clickOnBitmap(MyBitmap myBitmap, MotionEvent event) {
float xEnd = myBitmap.originX() + myBitmap.width();
float yEnd = myBitmap.originY() + myBitmap.height();;
if ((event.getX() >= myBitmap.originX() && event.getX() <= xEnd)
&& (event.getY() >= myBitmap.originY() && event.getY() <= yEnd)) {
int pixX = (int) (event.getX() - myBitmap.originX());
int pixY = (int) (event.getY() - myBitmap.originY());
if (!(myBitmap.getBitmap().getPixel(pixX, pixY) == 0)) {
return true;
} else {
return false;
}
}
return false;
}
C'est le sur le code tactile pour l'intégralité
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (clickOnBitmap(dog, event)) {
Toast.makeText(getContext(), "dog", Toast.LENGTH_SHORT).show();
} else if (clickOnBitmap(mouse,event)) {
Toast.makeText(getContext(), "mouse", Toast.LENGTH_SHORT).show();
}
return true;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
return true;
}
return false;
}
Je veux utiliser votre code, mais demande comment obtenir x et y du bitmap. Pouvez-vous m'aider dedans? –
Si vous dessinez vos bitmaps sur un canevas, vous devez déjà connaître ses valeurs X et Y car vous devez les passer en argument à la méthode 'canvas.drawBitmap'. –