如何为drawable着色

来源:互联网 发布:c语言 文件打开 编辑:程序博客网 时间:2024/06/04 19:48

如果 UI 对同一种图片  选中 非选中状态 只是颜色的变化  ,有的还有夜间模式,想一想一个app中药多少对应的套图,apk的包越来越大,老板不满意了,这时想杀产品狗和UI设计的心都有,不过天无绝人之路:请继续阅读:

核心 为.png 着色,前提是  白色和透明图片。


package com.xuan.drawabletinted;import android.content.res.Resources;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LightingColorFilter;import android.graphics.Paint;import android.graphics.drawable.BitmapDrawable;public final class TintedBitmapDrawable extends BitmapDrawable {  private int tint;  private int alpha;   public TintedBitmapDrawable(final Resources res, final Bitmap bitmap, final int tint) {    super(res, bitmap);    this.tint = tint;    this.alpha = Color.alpha(tint);  }   public TintedBitmapDrawable(final Resources res, final int resId, final int tint) {    super(res, BitmapFactory.decodeResource(res, resId));    this.tint = tint;    this.alpha = Color.alpha(tint);  }   public void setTint(final int tint) {    this.tint = tint;    this.alpha = Color.alpha(tint);  }   @Override public void draw(final Canvas canvas) {    final Paint paint = getPaint();    if (paint.getColorFilter() == null) {      paint.setColorFilter(new LightingColorFilter(tint, 0));      paint.setAlpha(alpha);    }    super.draw(canvas);  }}

intedBitmapDrawable,它重写了draw() 方法,实用aLightingColorFilter来处理着色的问题。它只包含三个函数,因此不用担心会增加太多方法个数。颜色可以在额外增加的两个构造函数中指定,也可以通过setTint()方法。

package com.xuan.drawabletinted;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.widget.ImageView;public class MainActivity extends Activity {    ImageView imageView, imageView2, imageView3, imageView4, imageView5;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        imageView = (ImageView) findViewById(R.id.img_view);        imageView.setImageDrawable(new TintedBitmapDrawable(getResources(), R.mipmap.ic_add_course, Color.BLUE));        imageView2 = (ImageView) findViewById(R.id.img_view2);        imageView2.setImageDrawable(new TintedBitmapDrawable(getResources(), R.mipmap.ic_add_course, Color.YELLOW));        imageView3 = (ImageView) findViewById(R.id.img_view3);        imageView3.setImageDrawable(new TintedBitmapDrawable(getResources(), R.mipmap.ic_add_course, Color.BLACK));        imageView4 = (ImageView) findViewById(R.id.img_view4);        imageView4.setImageDrawable(new TintedBitmapDrawable(getResources(), R.mipmap.ic_add_course, Color.GREEN));        imageView5 = (ImageView) findViewById(R.id.img_view5);        imageView5.setImageDrawable(new TintedBitmapDrawable(getResources(), R.mipmap.ic_add_course, Color.MAGENTA));    }}



说到这里,有的人可能不乐意了:Lollipop不是支持着色了么?回答:这是兼容Lollipop一下的版本

可能又要问,图片的圆形 阴影 标签什么的...没关系,这么简单的代码,相信你能改出来


0 0
原创粉丝点击