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; } 
  • Erreur android.graphics.Canvas.throwIfRecycled lors de la superposition de bitmaps
  • Dessin d'Android sur toile
  • Les fonctions de dessin en toile ne fonctionnent pas après l'avoir verrouillé et déverrouillé
  • Comment définir la taille de la toile?
  • Support de toiles HTML5 et Android Webview
  • Détail du dessin de toile Android
  • Nouvelle ligne lors de la peinture d'un texte dans une image
  • Le sélecteur de couleurs ne fonctionne pas pour annuler et refaire
  • coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.