Comment faire un bitmap à l'aide de la toile pouvant être cliquable?

Comment puis-je rendre accessible le bitmap créé? Voici le code que j'ai utilisé pour créer un bitmap en utilisant un lien.

public class DrawView extends View implements OnClickListener { public DrawView(Context context) { super(context); paint = new Paint(); image = BitmapFactory.decodeResource(getResources(), R.drawable.andmrktsmall); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int canWidth = canvas.getWidth(); int canHeight = canvas.getHeight(); int width = (canWidth - 200) / 2; int height = (canHeight - 100) / 2; Bitmap indexcanvas = Bitmap.createScaledBitmap(image, 200, 100, true); canvas.drawBitmap(indexcanvas, width, height, paint); this.setBackgroundColor(Color.YELLOW); } @Override public void onClick(View v) { Toast.makeText(context, "View is clicked", 1).show(); } } 

2 Solutions collect form web for “Comment faire un bitmap à l'aide de la toile pouvant être cliquable?”

En définissant un OnClickListener sur cette vue, tout cela sera cliquable (mais pas limité à votre bitmap). Pour vérifier si oui ou non l'utilisateur a cliqué uniquement sur le bitmap lui-même, vous devez annuler onTouchEvent (événement MotionEvent) et vérifier si les coordonnées tactiles sont identiques à celles du bitmap.

 @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: //Check if the x and y position of the touch is inside the bitmap if( x > bitmapXPosition && x < bitmapXPosition + bitmapWidth && y > bitmapYPosition && y < bitmapYPosition + bitmapHeight ) { //Bitmap touched } return true; } return false; } 

Remplacer simplement bitmapXPosition et bitmapYPosition avec les coordonnées que vous utilisez pour dessiner le bitmap, et bitmapWidth et bitmapHeight avec la largeur et la hauteur que vous utilisez pour le dessiner.

Essayez également de ne pas allouer de mémoire (créer des objets) dans la méthode onDraw () de n'importe quelle vue. C'est mauvais pour la performance.

MODIFIER

 private Rect r; private Paint paint; Bitmap bitmap; public TestRect(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); paint = new Paint(); paint.setColor(Color.BLUE); r = new Rect(); bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); } public TestRect(Context context, AttributeSet attrs) { super(context, attrs); paint = new Paint(); paint.setColor(Color.BLUE); r = new Rect(); bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); } public TestRect(Context context) { super(context); paint = new Paint(); paint.setColor(Color.BLUE); r = new Rect(); bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher); } @Override public void onDraw(Canvas c) { r.set(getWidth()/2, getHeight()/2, getWidth()/2 + 200, getHeight()/2 + 200); //c.drawRect(r, paint); c.drawBitmap(bitmap, null, r, paint); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch(event.getAction()) { case MotionEvent.ACTION_DOWN: //Check if the x and y position of the touch is inside the bitmap if( x > getWidth()/2 && x < getWidth()/2 + 200 && y > getHeight()/2 && y < getHeight()/2 + 200 ) { Log.e("TOUCHED", "X: " + x + " Y: " + y); //Bitmap touched } return true; } return false; } 

En dessinant le bitmap en utilisant un Rect comme coordonnées, vous pouvez vérifier si le contact se trouve dans le bitmap ou non. De plus, au lieu de cette énorme et si moche déclaration «si», vous pouvez utiliser

 if(r.contains(x, y)) { //BITMAP TOUCHED } 
 @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); if (drawable.getBounds().contains(x,y) && event.getAction()==MotionEvent.ACTION_DOWN) { Log.e(TAG, "onTouchEvent: drawable touched "); return true; } return false; } 
  • Le bouton flottant Android ne s'affiche pas
  • Comment reconnaître le caractère dessiné sur toile
  • Comment dessiner une roue sur toile?
  • Peinture claire de la toile sans effacer l'image d'arrière-plan - Android
  • Application Android - Comment enregistrer un dessin bitmap sur un canevas comme image? Vérifier le code?
  • Pourquoi la toile n'est-elle pas de la même taille que celle de OnDraw? (Android)
  • Comment placer l'image de marque d'épingle sur une image dans Android?
  • Définition de la taille du texte à l'aide de PDFDocument Android sur la base du document PDF / taille de la toile
  • Android - Dessiner un labyrinthe à la toile avec un mouvement de caractère lisse
  • Android M - Keychain comme stockage pour nom d'utilisateur / mot de passe
  • Combinez deux bitmap et enregistrez-vous en format jpg dans Android?
  • coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.