2016-12-27 2 views
0

Je travaille sur ma première application de jeu, lorsque l'utilisateur touche une image que l'application affiche un message à l'utilisateur (ou fait d'autres choses dans d'autres situations). Mes photos sont des formes non géométriques (par exemple des photos des animaux) avec un fond transparent 100%Traitement de l'événement de toucher des parties non transparentes d'une imageview

like this

(j'ai utilisé Photoshop et les avez enregistrées au format PNG.)

Mon problème est que je dois pour réagir (et afficher le message, ...) seulement lorsque la forme de l'animal elle-même (PAS le fond/les coins transparents de l'image) est touchée par l'utilisateur.

J'ai utilisé la solution proposée dans this question pour savoir si le pixel touché est transparent ou non, mais cela ne fonctionne pas comme je le souhaite. Voici une partie de ma méthode onCreate() dans MainActivity.java:

tempIV=(ImageView)findViewById(R.id.birdIV); 
final Bitmap bitmap = (BitmapDrawable)tempIV.getDrawable()).getBitmap(); 
tempIV.setOnTouchListener(new View.OnTouchListener(){ 
    @Override 
    public boolean onTouch(View v, MotionEvent event){ 
     int x = (int)event.getX(); 
     int y = (int)event.getY(); 
     int transparency = bitmap.getPixel(x,y); 
     if (transparency == 0) 
      { //Do nothing 
       return false;} 
     else { 
       Toast.makeText(MainActivity.this, 
         "This is an animal!", Toast.LENGTH_LONG).show(); 
       } 
      return true; 
    } 
    }); 

Que dois-je faire?

Répondre

1

Essayez d'utiliser ceci: -

if (bitmap.getPixel(x, y) == Color.TRANSPARENT) 
{ 
    return false; //don't react 
} 
else 
{ 
    return true; //do something like intent 
} 
+0

Essayé aussi, mais tout comme mon propre code, il ressemble à la réaction de l'application au clic de l'utilisateur n'est pas 100% ce qui devrait; parfois, il considère les pixels transparents à 100% opaques et vice versa. – Atieh