Applying ColorFilter to ImageView with ShapedDrawable

前端 未结 4 1662
北海茫月
北海茫月 2020-11-27 16:21

I have an ImageView with android:src set to a ShapedDrawable, namely a white circle. What I want is to colorize this ImageView

相关标签:
4条回答
  • 2020-11-27 16:30

    If you want to change Image Color use

    PorterDuff.Mode.SRC_ATOP instead
    PorterDuff.Mode.MULTIPLY
    

    in above example.

    0 讨论(0)
  • 2020-11-27 16:33

    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();
    
    0 讨论(0)
  • 2020-11-27 16:46

    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

    0 讨论(0)
  • 2020-11-27 16:50

    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 BitmapDrawables).

    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 ImageViews 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:

    Screenshot of colored circles

    0 讨论(0)
提交回复
热议问题