2011-08-07 52 views
0

作爲練習,我試圖擴展ImageButton以添加一些我認爲很有用的功能。其中一個特別是卓爾影。我已經用這個命名了牆。創建自定義視圖:如何擴展一個類並訪問基類的私有成員變量?

在我看來,一個延伸BitmapDrawable類是必要的。該類包含一個Paint對象,用於將位圖繪製到屏幕上。如果我有權訪問這個Paint對象...我所要做的就是將其稱爲setShadowLayer()方法...但是,唉,它是private。有一個public方法,getPaint()將返回繪畫對象,但除非有相應的setPaint()方法,否則對它的任何修改都是無用的。 (沒有)。

目前,我的思維過程看起來像下面...

  1. 創建類ShadowBitmapDrawableextends BitmapDrawable
  2. 在這個班,在某種程度上改變BitmapDrawablePaint對象用PaintsetShadowLayer()方法。
  3. 在我的自定義ImageButton類中,調用setImageDrawable(Drawable d),並將其傳遞給我的ShadowBitmapDrawable對象。

第2步是路障。我能做些什麼來改變BitmapDrawablePaint對象?請注意,我只是將我的思考過程添加爲指示我在這個問題中的位置。我接受其他建議。

這裏有一些參考文獻:



P.S.我有一種不好的感覺,我已經知道我要得到的答案,而且我不會喜歡它。以爲我會發布這個問題,並希望最好的。

回答

1

怎樣才能改變BitmapDrawable的Paint對象?

克隆BitmapDrawable到您的項目,重構它到你自己的包,使數據成員protected(或提供protected制定者或某事),用你的修改BitmapDrawable,並測試赫克出來。

+0

聽起來很有趣。我是否克隆Android存儲庫,將它作爲eclipse中的庫項目添加,將庫添加到我的構建路徑並進行修改?如果沒有,你能否指點我一個在線資源讓我開始朝正確的方向發展? – dfetter88

+0

「我是否克隆Android存儲庫,將它作爲eclipse中的庫項目添加,將庫添加到我的構建路徑並進行修改?」 - 沒有。 「如果沒有,你能指點我一個在線資源,讓我開始朝正確的方向發展嗎?」 - 點擊您帖子中「BitmapDrawable」的源代碼鏈接。用鼠標突出顯示源代碼。按 - 複製它。在您的項目中創建一個新的Java源文件。粘貼您複製的代碼。將軟件包名稱更改爲「android.widget」以外的內容。 – CommonsWare

+0

唯一的問題是'inflate()'方法使用'com.android.internal.R'中的'Styleable'。根據我的理解,我們不能在包樹的內部分支中包含任何內容。有什麼建議麼? – dfetter88

相關問題