Comme un exercice, j'essaie d'étendre ImageButton
pour ajouter quelques fonctionnalités que je pense serait utile. L'un, en particulier, est une ombre drow. J'ai frappé le mur proverbial avec celui-ci.Création d'une vue personnalisée: comment puis-je étendre une classe et accéder aux variables de membre privées de la classe de base?
Il me semble qu'une classe s'étendant BitmapDrawable
est nécessaire. Cette classe contient un objet Paint
utilisé pour dessiner le bitmap à l'écran. Si j'avais accès à cet objet Paint
... tout ce que je devrais faire, c'est appeler la méthode setShadowLayer()
... mais, hélas, c'est private
. Il y a une méthode public
, getPaint()
qui retournera l'objet de peinture, mais toutes les modifications seraient inutiles sauf s'il y avait une méthode setPaint()
correspondante. (Il n'y a pas.)
Actuellement, mon processus de pensée ressemble à quelque chose comme ce qui suit ...
- Créer une classe
ShadowBitmapDrawable
quiextends BitmapDrawable
- Au sein de cette classe, modifier en quelque sorte l'objet de
Paint
BitmapDrawable
avec méthodesetShadowLayer()
. - Dans ma classe
ImageButton
personnalisée, appelez lesetImageDrawable(Drawable d)
et transmettez-le à mon objetShadowBitmapDrawable
.
L'étape 2 est le barrage routier. Que puis-je faire pour changer l'objet Paint
de BitmapDrawable
? Notez que j'ai ajouté mon processus de pensée seulement comme un indicateur de l'endroit où je suis dans ce problème. Je suis ouvert à d'autres suggestions.
Voici quelques références:
- BitmapDrawable source (étend
Drawable
pour dessiner bitmaps) - ImageView source (classe de base de
ImageButton
) - Drawable source
post-scriptum J'ai un mauvais pressentiment Je connais déjà la réponse que je vais recevoir, et je ne vais pas l'aimer. Je pensais que je posterais la question de toute façon et j'espère que tout ira pour le mieux. Que puis-je faire pour modifier l'objet Paint de BitmapDrawable?
Sons intéressants. Est-ce que je clone le référentiel Android, l'ajoute en tant que projet de bibliothèque dans eclipse, ajoute la bibliothèque à mon chemin de compilation et apporte mes modifications? Si non, pourriez-vous me diriger vers une ressource en ligne pour me lancer dans la bonne direction? – dfetter88
"Dois-je cloner le dépôt Android, l'ajouter comme projet de bibliothèque dans eclipse, ajouter la bibliothèque à mon chemin de compilation et apporter mes modifications?" -- non. "Si non, pourriez-vous me diriger vers une ressource en ligne pour me lancer dans la bonne direction?" - cliquez sur le lien vers le code source de 'BitmapDrawable' dans votre message. Mettez en surbrillance le code source avec votre souris.Appuyez sur - pour le copier. Créez un nouveau fichier source Java dans votre projet. Collez le code que vous avez copié. Changez le nom du paquet en quelque chose d'autre que 'android.widget'. –
CommonsWare
Le seul problème est que la méthode 'inflate()' utilise 'Styleable' de' com.android.internal.R'. À ma connaissance, nous ne pouvons rien inclure de cette branche interne de l'arborescence des paquets. Aucune suggestion? – dfetter88