Tinting着色 -- 改变图标颜色
开发中经常遇到叫改变图标颜色的需求,叫美工重新切图麻烦还耗时。
Android5.0之后,可以通过XML文件中设置tint和tintMode属性实现,5.0之前要用support-v7包下的AppCampatxxxView控件
然后通过代码实现。
原理
通过给图片上一层遮罩颜色,从而改变图片的原始颜色
Android 5.0之后直接再XML中使用
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:src="@drawable/square_gray" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:src="@drawable/square_gray"
android:tint="@android:color/holo_blue_bright" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:src="@drawable/square_gray"
android:tint="@android:color/holo_blue_bright"
android:tintMode="add" />
<ImageView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:src="@drawable/square_gray"
android:tint="@android:color/holo_blue_bright"
android:tintMode="multiply" />
Android 5.0之前使用方式
XML文件中
<android.support.v7.widget.AppCompatImageView
android:id="@+id/iv"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginTop="10dp"
android:src="@drawable/square_gray" />
Activity中
AppCompatImageView iv = findViewById(R.id.iv);
ColorStateList lists = getResources().getColorStateList(android.R.color.holo_blue_bright);
iv.setSupportImageTintMode(PorterDuff.Mode.ADD);
iv.setSupportImageTintList(lists);