2010-10-01 5 views
0

je un widget qui ressemble à ceci:applications: l'ajout d'une texture bitmap à un élément non rectangulaire

alt text

Chaque cône est un "élément touchable". Maintenant, je veux mettre une texture bitmap au-dessus de chaque cône. Cependant, les images bitmap sont toutes rectangulaires, de sorte qu'une texture bitmap au-dessus d'un cône interfère avec la texture bitmap au-dessus d'un autre cône. Je me demande quelle est la meilleure solution à cette approche. Devrais-je simplement créer une image qui correspond (en rectangle) exactement au-dessus du cône et rendre les zones non utilisées transparentes? Une deuxième question est, comment les textures bitmap fonctionnent avec étirement? Parce que tout ce cercle s'adapte à toute la taille de l'écran, alors que les textures bitmap sont à peu près de taille unique.

Répondre

2

Offhand Je ne peux pas imaginer une meilleure façon de dessiner des bitmaps sur ces cônes que votre propre suggestion d'utiliser des zones transparentes. Cependant, je peux vous aider avec votre deuxième question car l'étirement des bitmaps n'est pas difficile. Vous avez quelques options dans la classe Canvas. Par exemple:

canvas.save(); 
canvas.scale(xRatio, yRatio); 
canvas.drawBitmap(....); 
canvas.restore(); 

Vous pouvez également utiliser une matrice, en utilisant matrix.postScale(xRatio, yRatio), pour ensuite générer soit un bitmap plus grand et d'en tirer normalement, ou passer la matrice à votre commande canvas.drawBitmap(....) pour le rendre échelle alors qu'il dessine.

Toutes ces méthodes supposent que vous avez accès au canevas de dessin lui-même. Si vous utilisez une vue, vous pouvez la sous-classer et remplacer la méthode onDraw(Canvas canvas) pour récupérer le canevas avant qu'il ne commence à le dessiner. Si vous utilisez un SurfaceHolder, vous devriez déjà savoir comment obtenir le canvas.


Édition: J'ai oublié la troisième méthode que j'allais décrire. Vous pouvez également utiliser le canvas.drawBitmap(bitmap, srcRect, dstRect, paint) pour que le canevas redimensionne le bitmap en fonction du rectangle de destination. En bref, il existe de nombreuses méthodes pour cela - choisissez celle qui est la plus facile en fonction de votre application!

+0

Merci pour cette réponse détaillée :-) – znq

Questions connexes