看了几篇关于tint的文章,各有千秋,今天总结了一下。
如果想要兼容6.0以下版本,要用代码的方式来着色。
public class TestTintActivity extends Activity implements View.OnClickListener{
private ImageView mImageView, mImageView2, mImageSelect, mImageView5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tint);
mImageView = (ImageView) findViewById(R.id.image);
mImageView2 = (ImageView) findViewById(R.id.image2);
mImageSelect = (ImageView) findViewById(R.id.image_select);
mImageView5 = (ImageView) findViewById(R.id.image5);
initDemo1();
initDemo2();
initDemo3();
}
//基础的改变图片颜色的代码
private void initDemo1() {
Drawable originalDrawable = ContextCompat.getDrawable(this, R.drawable.ic_star_big_normal);
Drawable.ConstantState state = originalDrawable.getConstantState();
Drawable tintDrawable = DrawableCompat.wrap(state == null ? originalDrawable : state.newDrawable()).mutate();
DrawableCompat.setTint(tintDrawable, Color.parseColor("#ff0000"));
mImageView.setImageDrawable(tintDrawable);
mImageView2.setImageDrawable(originalDrawable);
//Android 系统为了减少内存消耗,将应用中所用到的相同
//drawable (可以理解为相同资源)共享同一个 state,并称之为 constant state。
//这里用图表演示一下,两个 View 加载同一个图片资源,创建两个 drawables 对象,
//但是共享同一个 constant state 的场景:
}
/**
* 如何使用selector + tint
* 文件selector_home_drawable
* <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/ic_star_big_normal"/>
<item android:drawable="@drawable/ic_star_big_normal"/>
</selector>
*/
private void initDemo2() {
Drawable originalDrawable = ContextCompat.getDrawable(this, R.drawable.selector_home_drawable);
Drawable.ConstantState selectState = originalDrawable.getConstantState();
Drawable tintDrawable = DrawableCompat.wrap(selectState == null ? originalDrawable : selectState.newDrawable()).mutate();
DrawableCompat.setTintList(tintDrawable, ContextCompat.getColorStateList(this, R.color.selector_home));
mImageSelect.setImageDrawable(tintDrawable);
mImageSelect.setOnClickListener(this);
}
/**
* 如何改变图片底色,保持上面内容不变
*/
private void initDemo3() {
Drawable originalDrawable = ContextCompat.getDrawable(this, R.drawable.lingqian_gray);
Drawable.ConstantState selectState = originalDrawable.getConstantState();
Drawable tintDrawable = DrawableCompat.wrap(selectState == null ? originalDrawable : selectState.newDrawable()).mutate();
DrawableCompat.setTintMode(tintDrawable, PorterDuff.Mode.OVERLAY);
DrawableCompat.setTint(tintDrawable, Color.parseColor("#ff0000"));
mImageView5.setImageDrawable(tintDrawable);
}
@Override
public void onClick(View v) {
}
}
网友评论