android图标着色
主要原理:
PorterDuffColorFilter(int color, PorterDuff.Mode mode)
这个构造方法也接受两个值,一个是16进制表示的颜色值这个很好理解,而另一个是PorterDuff内部类Mode中的一个常量值,这个值表示混合模式。
PorterDuffColorFilter是ColorFilter的一个子类:
ColorFilter是对Drawable设置一个色彩过滤器。这是一个抽象类不能直接使用,他有三个子类:ColorMatrixColorFilter, LightingColorFilter, PorterDuffColorFilter 。
- ColorMatrixColorFilter 一个通过4*5的颜色矩阵来改变颜色的颜色过滤器;
- LightingColorFilter 一个可以模拟简单的灯光效果的颜色过滤器;
- PorterDuffColorFilter 一个可以使用单个颜色和指定Porter-Duff模式来对源像素进行染色颜色过滤器;
使用方法:
PorterDuffColorFilter(int color, PorterDuff.Mode mode) 构造器需要两个参数:
- color即我们需要渲染的颜色;
- mode即指定的指定Porter-Duff模式,如下图所示:
代码如下:
Bitmap transformBitmap = ((BitmapDrawable) drawable).getBitmap();
Bitmap resBitmap = Bitmap.createBitmap(transformBitmap.getWidth(), transformBitmap.getHeight(), transformBitmap.getConfig());
Canvas canvas = new Canvas(resBitmap);
Paint paint = new Paint();
paint.setColorFilter(new PorterDuffColorFilter(mColor, PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(transformBitmap, 0.0F, 0.0F, paint);
return resBitmap;
此外,android为我们提供了一个DrawableCompat类,通过它,我们可以更方便的对Drawable进行着色:
final Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTintList(wrappedDrawable, colors);
//wrappedDrawable.mutate();
return wrappedDrawable;
在Glide中使用(自定义transform):
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffColorFilter;import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;public class SetColorTransformGlide extends BitmapTransformation {private int mColor;private Context contxt;public SetColorTransformGlide(Context context) {super(context);this.contxt=context;}@Overrideprotected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {return transform(toTransform);}public SetColorTransformGlide(Context context, int color) {super(context);this.mColor = color;this.contxt=context;}public void setResourceColor(int resourceColor) {this.mColor = contxt.getResources().getColor(resourceColor);}public void setColor(int color) {this.mColor = color;}public int getWidth(Bitmap toTransform) {return toTransform.getWidth();}public int getHeight(Bitmap toTransform) {return toTransform.getHeight();}public Bitmap transform( Bitmap transformBitmap) {Bitmap resBitmap = Bitmap.createBitmap(transformBitmap);Canvas canvas = new Canvas(resBitmap);Paint paint = new Paint();paint.setColorFilter(new PorterDuffColorFilter(this.mColor, Mode.SRC_IN));canvas.drawBitmap(transformBitmap, 0.0F, 0.0F, paint);return resBitmap;}public String getId() {return "SetColorTransform color" + this.mColor;}
}
android图标着色相关推荐
- 解决Eclipse中Android图标不见了
解决Eclipse中Android图标不见了 最进在做android的时候,发现Eclipse上android图标不见了: 解决办法如下: 点击window ---->Customize Pe ...
- Android图标设计标准和原则
概述 本文将介绍如何在应用界面的不同部分使用符合Android 2.x系统风格的图标.遵守这些原则可以使应用程序为用户创造一个流畅统一的操作环境,而一个统一的外观,完整的用户界面会增加产品的附加价值, ...
- android图标的制作
android的adt提供了android图标的制作:Android icon set. 通过这个可以新建一个图标. 1.首先,在Eclipse中某个android项目上右击打开 New - Othe ...
- Android 图片着色 Tint 详解2—xml设置、selector
上篇文章介绍了给drawable设置tint 以达到颜色变化效果,这篇介绍下通过xml设置tint.代码设置tint以及如何设置tint selector. 在xml中设置tint 可以利用 andr ...
- QT For Android 图标制作
QT For Android 图标制作 1.打开一个工程点击项目,项目的构建需要选择Android for xxx(根据个人的需求来构建). 2.构建完成后点击项目==>点击Build==> ...
- 【译文】利用Palette为android应用着色
利用Palette为android应用着色 原文地址:Coloring Android Apps with Palette 材料设计中定义特征的方式之一就是利用颜色在屏幕上强调内容.通过使用Palet ...
- Android Tint着色器
文章目录 Android Tint着色器 概述 使用 XML中使用 代码中使用 选择器使用 tintMode详解 Android Tint着色器 概述 tint 译为着色.tint一般与tintMod ...
- Android图标上显示数字
Android图标上显示数字或加上数字的功能,直到Android4.4也没有实现.所以要修改系统的应用launcher来实现该效果. 之前你可能要参考其他一些博客或资料,对launcher的架构有一个 ...
- android 图标的格式,Android Design
图标就是一个表示屏幕内容并为操作.状态和应用提供第一印象的小幅图片. 在为应用设计图标时,需要牢记设备是多种多样的,这就带来了不同的像素密度(详见 设备与显示 ).为了应对这一问题,提供不同尺寸的图标 ...
最新文章
- 工业互联网 — Overview
- 谷歌地球API开发者指南(高级)
- ns3入门案例1 first.cc
- [20161128]关于Little Enddian.txt
- 优酷响应式在消费场景的落地之 iOS 篇
- Android工程中添加图片资源
- qtablewidget 添加一行
- 猿类必备:Zeplin 用法介绍
- iis服务器响应缓慢,IIS网站加载缓慢怎么办?如何处理?
- 我的世界 为何用java开发?
- 家谱二叉树c语言程序,家谱图-二叉树
- 红皮书——红色启示录
- java.io.IOException: FIS_AUTH_ERROR in Android Firebase
- #1163 : 博弈游戏·Nim游戏(数学博弈)
- Picker 选择器
- C++行为型模式-实现观察者模式
- DRV8814PWPR
- Supermap iDesktop处理导入CAD文件存在线型风格显示缺失问题
- LeetCode236.最近的公共祖先
- 大写金额用计算机简单些,Excel如何将较小的金额转换为大写金额?
热门文章
- 用html让屏幕全黑,这段让网页背景变成纯黑色的浏览器插件如何优化?
- C语言编程>第五周 ⑤ 编写一个程序,从键盘输入X,Y,Z 3个数, 编写函数计算3个数的立方和并返回计算结果。
- Overleaf中无法使用Grammarly检查语法的问题
- STM32F103+ESP8266接入阿里云平台(曲折的上云之路)
- 长安马自达2三厢劲翔上市 售8.68-11.58万元
- S7-1200与HIKVISION相机TCP通讯
- poi导出excel,数据相同时自动居中合并
- 编译可执行文件到ARM平台
- (附源码)springboot高校党建信息管理系统 毕业设计 051541
- HaaS EDU场景式应用学习 - 首页信息屏