作爲練習,我試圖擴展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
P.S.我有一種不好的感覺,我已經知道我要得到的答案,而且我不會喜歡它。以爲我會發布這個問題,並希望最好的。
聽起來很有趣。我是否克隆Android存儲庫,將它作爲eclipse中的庫項目添加,將庫添加到我的構建路徑並進行修改?如果沒有,你能否指點我一個在線資源讓我開始朝正確的方向發展? – dfetter88
「我是否克隆Android存儲庫,將它作爲eclipse中的庫項目添加,將庫添加到我的構建路徑並進行修改?」 - 沒有。 「如果沒有,你能指點我一個在線資源,讓我開始朝正確的方向發展嗎?」 - 點擊您帖子中「BitmapDrawable」的源代碼鏈接。用鼠標突出顯示源代碼。按 - 複製它。在您的項目中創建一個新的Java源文件。粘貼您複製的代碼。將軟件包名稱更改爲「android.widget」以外的內容。 –
CommonsWare
唯一的問題是'inflate()'方法使用'com.android.internal.R'中的'Styleable'。根據我的理解,我們不能在包樹的內部分支中包含任何內容。有什麼建議麼? – dfetter88