美文网首页
Android Tint ImageView 无法设置Tint

Android Tint ImageView 无法设置Tint

作者: 逝水ly | 来源:发表于2017-09-13 15:26 被阅读0次

    使用自定义TintableImageView

    importandroid.content.Context;

    importandroid.content.res.ColorStateList;

    importandroid.content.res.TypedArray;

    importandroid.util.AttributeSet;

    importcom.chianyu.circle.client.R;

    /**

    *@Description支持tintList着色ImageView

    */

    public classTintableImageViewextendsandroid.support.v7.widget.AppCompatImageView {

    privateColorStateListtint;

    publicTintableImageView(Context context) {

    super(context);

    }

    publicTintableImageView(Context context, AttributeSet attrs) {

    super(context, attrs);

    init(context, attrs,0);

    }

    private voidinit(Context context, AttributeSet attrs,intdefStyle) {

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TintableImageView, defStyle,0);

    tint= a.getColorStateList(R.styleable.TintableImageView_tint);

    a.recycle();

    }

    publicTintableImageView(Context context, AttributeSet attrs,intdefStyle) {

    super(context, attrs, defStyle);

    init(context, attrs, defStyle);

    }

    public voidsetColorFilter(ColorStateList tint) {

    this.tint= tint;

    super.setColorFilter(tint.getColorForState(getDrawableState(),0));

    }

    public voidsetTintList(ColorStateList colorList) {

    if(colorList !=null) {

    tint= colorList;

    drawableStateChanged();

    }

    }

    @Override

    protected voiddrawableStateChanged() {

    super.drawableStateChanged();

    if(tint!=null&&tint.isStateful())

    updateTintColor();

    }

    private voidupdateTintColor() {

    intcolor =tint.getColorForState(getDrawableState(),0);

    setColorFilter(color);

    }

    }

    相关文章

      网友评论

          本文标题:Android Tint ImageView 无法设置Tint

          本文链接:https://www.haomeiwen.com/subject/ckwksxtx.html