我有一個ImageView
與android:src
設置爲ShapedDrawable
,即一個白色圓圈。我想要的是在運行時響應某些事件對這個ImageView
着色。 imgView.setColorFilter
似乎是解決方案,但使用後(嘗試不同的參數)後,圖像變得不可見(我沒有看到它在屏幕上)。將ColorFilter應用於ImageView與ShapedDrawable
如何解決這個問題?有沒有更好的方法有色環?
我有一個ImageView
與android:src
設置爲ShapedDrawable
,即一個白色圓圈。我想要的是在運行時響應某些事件對這個ImageView
着色。 imgView.setColorFilter
似乎是解決方案,但使用後(嘗試不同的參數)後,圖像變得不可見(我沒有看到它在屏幕上)。將ColorFilter應用於ImageView與ShapedDrawable
如何解決這個問題?有沒有更好的方法有色環?
好吧,我有一個快速發揮這一點,並注意到你的問題的圈子消失。沒有你描述什麼剛剛你嘗試過,我假設你還沒有嘗試將顏色過濾器設置爲Drawable
本身呢? (而不是ImageView
,這似乎只與BitmapDrawable
s一起工作)。
下面的語句完全正常工作的一個XML聲明ShapeDrawable
以白色作爲初始顏色:
ImageView redCircle = (ImageView) findViewById(R.id.circle_red_imageview);
ImageView greenCircle = (ImageView) findViewById(R.id.circle_green_imageview);
ImageView blueCircle = (ImageView) findViewById(R.id.circle_blue_imageview);
// we can create the color values in different ways:
redCircle.getDrawable().setColorFilter(Color.RED, PorterDuff.Mode.MULTIPLY);
greenCircle.getDrawable().setColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY);
blueCircle.getDrawable().setColorFilter(getResources().getColor(R.color.blue), PorterDuff.Mode.MULTIPLY);
的ShapeDrawable
的完整性:(我設置的大小上ImageView
,見下文)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<solid android:color="@android:color/white" />
</shape>
而ImageView
S作爲示例之一:
<ImageView
android:id="@+id/circle_red_imageview"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="5dp"
android:src="@drawable/circle_white" />
的視覺效果:
在'Drawable'上調用'mutable()'將有助於保持drawable的狀態。 – Sufian 2014-03-25 13:13:03
哇這只是救了我,你一定想把過濾器應用到'Drawable'而不是簡單的'ImageView'。 – Maurizio 2014-07-30 00:54:08
如果我們使用白色作爲原始顏色,我們是否可以得到我們在此選擇的確切顏色setColorFilter(0xff00ff00,PorterDuff.Mode.MULTIPLY)。如果不是我們怎樣才能得到確切的顏色? – SadeepDarshana 2015-10-24 15:17:16
如果你想改變圖像顏色在上面的例子中使用
PorterDuff.Mode.SRC_ATOP instead
PorterDuff.Mode.MULTIPLY
。
我認爲作者問過任何過濾器,而不僅僅是SRC_ATOP或MULTIPLY。 – kelin 2015-12-14 12:33:49
您可以在xml中使用ImageView中的屬性android:tint
。
例子:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_drawable"
android:tint="@color/your_color" />
測試在Android 4.1.2和6.0.1
不錯的答案不需要跑 – marlonpya 2017-10-31 03:14:39
@marlonpya謝謝! – 2017-10-31 10:36:54
你可以使用這個庫做到這一點很簡單: https://github.com/jrvansuita/IconHandler
它將像這樣工作:
Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();
你可能會發現[這個相關的問答](有趣的問題)(http://stackoverflow.com/questions/4354939/understanding-the-use-of-colormatrix-and-colormatrixcolorfilter-to-modify-a-draw)。 – 2012-04-11 21:49:20
對不起,但我找不到與此問題相關的任何內容。 – aplavin 2012-04-11 21:56:53
我不知道如何找不到相關的接受答案...總之,這裏是另一個類似的主題:[鏈接](http://stackoverflow.com/q/1309629/1029225)。如上所示,請嘗試:'imgView.setColorFilter(0xff00ffff,PorterDuff.Mode.MULTIPLY);'。如果這不符合您的需求,那麼還會提出更復雜的解決方案。 – 2012-04-12 04:53:44