作为练习,我尝试扩展ImageButton
以添加一些我认为有用的功能。尤其是卓尔阴影。我已经把这堵墙撞了。
在我看来,扩展BitmapDrawable
的类是必需的。此类包含一个Paint
对象,该对象用于将位图绘制到屏幕上。如果我可以访问此Paint
对象,那么我所要做的就是调用它的setShadowLayer()
方法...但是,可惜,它是private
。有一个public
方法,getPaint()
将返回绘画对象,但是除非有相应的setPaint()
方法,否则对其进行的任何修改都是无用的。 (没有)
目前,我的思考过程类似于以下内容...
创建类ShadowBitmapDrawable
其中的extends BitmapDrawable
在此类中,用BitmapDrawable
的Paint
方法以某种方式更改Paint
的setShadowLayer()
对象。
在我的自定义ImageButton
类中,调用setImageDrawable(Drawable d)
,并将其传递给我的ShadowBitmapDrawable
对象。
步骤2是障碍。如何更改BitmapDrawable
的Paint
对象?请注意,我的思考过程只是为了指示我在此问题中的位置而添加的。我愿意接受其他建议。
以下是一些参考:
BitmapDrawable source(扩展Drawable
以绘制位图)
ImageView source(ImageButton
的基类)
Drawable source
附言我有一种不好的感觉,我已经知道我将要得到的答案,而且我不会喜欢它。以为我还是会提出这个问题,并希望最好。
最佳答案
我该怎么做才能更改BitmapDrawable的Paint对象?
将BitmapDrawable
克隆到您的项目中,将其重构到您自己的包中,使数据成员protected
(或提供protected
setter或类似的东西),使用修改后的BitmapDrawable
,然后测试一下。
关于java - 创建自定义 View :如何扩展类并访问基类的私有(private)成员变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6973852/