使用硬件层来实现灰度视图
来源:互联网 发布:android final数组 编辑:程序博客网 时间:2024/06/03 04:31
最近从设计团队那里得到一个需求,让一个特定的view在彩色和灰度之间切换。灰度,一个专用术语,意思是去掉一张图片中的所有饱和度。我快速Google 了一下得到了如下的代码:
public Bitmap toGrayscale(Bitmap original) { int height = original.getHeight(); int width = original.getWidth(); Bitmap grayscale = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(grayscale); Paint paint = new Paint(); ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); // <-- important line here ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm); paint.setColorFilter(f); c.drawBitmap(original, 0, 0, paint); return grayscale;}
如果你要做的就是去掉一张图片的饱和度非常简单,但是假如我们是想去掉一个view (如果是个ViewGroup还包括所有子view)的饱和度呢?
其实一样很简单,可以通过在一个View layer上应用颜色过滤来完成。
如果我们查看LAYER_TYPE_HARDWARE(或者LAYER_TYPE_SOFTWARE)的文档,可以看到如下的解释:
"A hardware layer is useful to apply a specific color filter and/or blending mode and/or translucency to a view and all its children."
“一个hardware layer对于在view及其子view上应用颜色过滤,混合模式,半透明很有用 ”
Nice!我们可以用下面的代码来应用我们的ColorMatrixColorFilter:
public void setGreyscale(View v, boolean greyscale) { if (greyscale) { // Create a paint object with 0 saturation (black and white) ColorMatrix cm = new ColorMatrix(); cm.setSaturation(0); Paint greyscalePaint = new Paint(); greyscalePaint.setColorFilter(new ColorMatrixColorFilter(cm)); // Create a hardware layer with the greyscale paint v.setLayerType(LAYER_TYPE_HARDWARE, greyscalePaint); } else { // Remove the hardware layer v.setLayerType(LAYER_TYPE_NONE, null); }}
这里是 Cheesesquare app变成灰度模式的gif效果:
附加提示:hardware layer非常昂贵!最好只是暂时激活一个hardware layer。
英文原文:Greyscale Views on Android
0 0
- 使用硬件层来实现灰度视图
- 使用硬件层来实现灰度视图
- 使用轨迹球来实现视图的旋转
- 使用ViewModel来实现多个Model传送至视图
- STM8S105K4使用硬件SPI来读取LSM9DS1
- 使用灰度共生矩阵实现指纹分割
- 视图动画效果 通过layer层实现
- 使用PCF8563实现硬件看门狗
- yii框架使用视图层(V层)
- yii框架使用视图层(V层)
- Spring 3.x MVC 入门3 -- 使用内容协商来实现多视图
- 视图层
- 何不试试使用xsl+jsp+xml+taglibs来实现web显示层!
- udev与硬件抽象层HAL的实现原理
- udev与硬件抽象层HAL的实现原理
- udev与硬件抽象层HAL的实现原理
- Android系统硬件抽象层原理与实现之WIFI
- Android系统硬件抽象层原理与实现之GPS
- 自己写的一个请求
- 预测产品的分词结果、相似度降序排序.
- 项目三(2)
- Android之NetworkOnMainThreadException异常
- 第10周—项目3(1)计算二叉树节点个数
- 使用硬件层来实现灰度视图
- BootStrap学习笔记-2
- android中在指定的界面中插入引导页
- yii2 restful api搭建 实例
- easyUI 关于自动添加一行的源码地址
- 第十周实践项目3—利用二叉树遍历思想解决问题
- ShareSDK微信分享时的坑
- about percpu
- python数据结构学习笔记-4-链表