I have an ImageView
with android:src
set to a ShapedDrawable
, namely a white circle. What I want is to colorize this ImageView
If you want to change Image Color use
PorterDuff.Mode.SRC_ATOP instead
PorterDuff.Mode.MULTIPLY
in above example.
You can do it very very simple using this library: https://github.com/jrvansuita/IconHandler
It will working like this:
Icon.on(yourImageView).color(R.color.your_color).icon(R.mipmap.your_icon).put();
You can use attribute android:tint
in ImageView in xml.
Example:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/your_drawable"
android:tint="@color/your_color" />
Tested on Android 4.1.2 and 6.0.1
Alright, I had a quick play with this and noticed your issue of the circles disappearing. Without you describing what exactly you tried, I assume you haven't tried setting the color filter to the Drawable
itself yet? (as opposed to the ImageView
, which only seems to work with BitmapDrawable
s).
The following statements work perfectly fine for an xml-declared ShapeDrawable
with white as initial color:
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 );
The ShapeDrawable
for completeness: (I set the size on the ImageView
, see below)
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<solid android:color="@android:color/white" />
</shape>
And one of the ImageView
s as example:
<ImageView
android:id="@+id/circle_red_imageview"
android:layout_width="40dp"
android:layout_height="40dp"
android:padding="5dp"
android:src="@drawable/circle_white" />
Visual result: