Android | Tint 着色器

Android | Tint 着色器

/ 前言 /

有多少程序猿曾因切图问题与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

其他的文章代码都已经上传到公众号上(二两仙气儿),欢迎小白一起交流学习。

相关推荐

高樓窗戶怎麼清?濕抹布擦玻璃,水垢更明顯?
365体育投注软件下载

高樓窗戶怎麼清?濕抹布擦玻璃,水垢更明顯?

📅 10-25 👁️ 7466
Microsoft Edge 中的位置和隐私
365bet限制投注

Microsoft Edge 中的位置和隐私

📅 10-11 👁️ 9154
狒的解释
365bet限制投注

狒的解释

📅 10-08 👁️ 8164