作为练习,我尝试扩展ImageButton以添加一些我认为有用的功能。尤其是卓尔阴影。我已经把这堵墙撞了。

在我看来,扩展BitmapDrawable的类是必需的。此类包含一个Paint对象,该对象用于将位图绘制到屏幕上。如果我可以访问此Paint对象,那么我所要做的就是调用它的setShadowLayer()方法...但是,可惜,它是private。有一个public方法,getPaint()将返回绘画对象,但是除非有相应的setPaint()方法,否则对其进行的任何修改都是无用的。 (没有)

目前,我的思考过程类似于以下内容...


创建类ShadowBitmapDrawable其中的extends BitmapDrawable
在此类中,用BitmapDrawablePaint方法以某种方式更改PaintsetShadowLayer()对象。
在我的自定义ImageButton类中,调用setImageDrawable(Drawable d),并将其传递给我的ShadowBitmapDrawable对象。


步骤2是障碍。如何更改BitmapDrawablePaint对象?请注意,我的思考过程只是为了指示我在此问题中的位置而添加的。我愿意接受其他建议。

以下是一些参考:


BitmapDrawable source(扩展Drawable以绘制位图)
ImageView sourceImageButton的基类)
Drawable source



附言我有一种不好的感觉,我已经知道我将要得到的答案,而且我不会喜欢它。以为我还是会提出这个问题,并希望最好。

最佳答案

我该怎么做才能更改BitmapDrawable的Paint对象?


BitmapDrawable克隆到您的项目中,将其重构到您自己的包中,使数据成员protected(或提供protected setter或类似的东西),使用修改后的BitmapDrawable,然后测试一下。

关于java - 创建自定义 View :如何扩展类并访问基类的私有(private)成员变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6973852/

10-12 00:24