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

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

猜你喜欢

转载自blog.csdn.net/ezsxrtghjmk/article/details/130344261