/ 前言 /
有多少程序猿曾因切图问题与UI争执不休...
又有多少项目因为图片资源过多卡顿不止...
怎么提升图片资源的复用性?怎么给APK瘦身?
Tint属性来帮助我们实现
/ 正文 /
Tint是一种用于Android 视图(例如按钮和图像视图)的颜色过滤器,其效果是将非透明的像素点渲染成指定的颜色。说白了就是它会把带有颜色的部分替换成另一种颜色。
以下图为例,实现图标按下的效果。
大多数情况下,我们会找两张图片然后通过selector标签来实现这种切换的效果,XML代码如下:
但是在一个项目中,如果有大量的同类型icon要进行颜色切换(比如十几个),我们是不是要插入几十个相对的图片资源呢?
(确实可行,但这种方式的资源复用性太差了,插入个百八十个图片,项目不卡都说不过去了)
如果仅是对同张图片的颜色进行变换,推荐大家使用Tint。布局文件中的使用方式如下:
可以看到两个ImageView控件中我引用的图片资源相同(@mipmap/user),在第二个ImageView中我添加了tint属性(蓝色),来看下预览效果:
可以看到在使用了Tint属性之后仅使用了一张图片资源即可实现切换效果。遇见这种icon状态切换的功能即可通过Tint来提高图片资源的复用率,为APK瘦身。
当然了,除了在XML中引用外,还可以通过代码使用Tint,下面还是以icon按下效果来作为背景,代码如下:
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image_view);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//想要添加的颜色
int color = ContextCompat.getColor(getApplicationContext(), R.color.blue);
//获取矢量图的图片资源,以及主题模式。
//由于我这里没用到主题就写null了
VectorDrawableCompat drawableImg = VectorDrawableCompat.create(getResources(), R.mipmap.user, null);
drawableImg.setTint(color);
imageView.setImageDrawable(drawableImg);
}
});
}
}
//根据业务逻辑的不同,可以适当添加自己的逻辑,来实现矢量图的复用。
效果预览:
/ 其他 /
除了Tint之外呢,ImageView控件有一个叫做backgroundTint的属性,此属性可以直接在原图上通过设置backgroundTint属性来达到想要的图片效果,也可以在代码中使用setBackgroundTintList来使用该属性,我就不过多解释了,可以在尝试Tint之余也尝试下background。
总而言之,言而总之。在日常的开发过程中,遇到同种图片颜色不同的情况下,通过使用Tint属性或backgroundTint属性都可以大大提升图片资源的复用性,为我们的APK减肥~
Tint属性的用法介绍就到此为止咯~
希望大家能善用此类属性来提高项目的性能~
/ 结尾 /
喜欢的同学点个赞再走呗~
欢迎一起交流学习。
See you
其他的文章代码都已经上传到公众号上(二两仙气儿),欢迎小白一起交流学习。