版权声明:本文为博主原创文章,未经博主允许不得转载。

Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable

这里讲一下如何实现PS调色板中的透明度选择条.首先说一下要点:

1. 透明度选择条实际上是基于白色(0xffffffff)和灰色(0xffcbcbcb)之间的颜色区间选取, 由此我们可以实现一个半透明颜色的选取

2.该应用不仅可以做透明度颜色选取,也可以在应用中实现半透明的图像效果

下面看一下代码,主要是基于Drawable的重写:

[java] view plaincopy
  1. /*
  2. * Copyright (C) 2010 Daniel Nilsson
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. *      http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package net.margaritov.preference.colorpicker;
  17. import android.graphics.Bitmap;
  18. import android.graphics.Bitmap.Config;
  19. import android.graphics.Canvas;
  20. import android.graphics.ColorFilter;
  21. import android.graphics.Paint;
  22. import android.graphics.Rect;
  23. import android.graphics.drawable.Drawable;
  24. /**
  25. * This drawable that draws a simple white and gray chessboard pattern.
  26. * It's pattern you will often see as a background behind a
  27. * partly transparent image in many applications.
  28. * @author Daniel Nilsson
  29. */
  30. public class AlphaPatternDrawable extends Drawable {
  31. private int mRectangleSize = 10;
  32. private Paint mPaint = new Paint();
  33. private Paint mPaintWhite = new Paint();
  34. private Paint mPaintGray = new Paint();
  35. private int numRectanglesHorizontal;
  36. private int numRectanglesVertical;
  37. /**
  38. * Bitmap in which the pattern will be cahched.
  39. */
  40. private Bitmap      mBitmap;
  41. public AlphaPatternDrawable(int rectangleSize) {
  42. mRectangleSize = rectangleSize;
  43. mPaintWhite.setColor(0xffffffff);
  44. mPaintGray.setColor(0xffcbcbcb);
  45. }
  46. @Override
  47. public void draw(Canvas canvas) {
  48. canvas.drawBitmap(mBitmap, null, getBounds(), mPaint);
  49. }
  50. @Override
  51. public int getOpacity() {
  52. return 0;
  53. }
  54. @Override
  55. public void setAlpha(int alpha) {
  56. throw new UnsupportedOperationException("Alpha is not supported by this drawwable.");
  57. }
  58. @Override
  59. public void setColorFilter(ColorFilter cf) {
  60. throw new UnsupportedOperationException("ColorFilter is not supported by this drawwable.");
  61. }
  62. @Override
  63. protected void onBoundsChange(Rect bounds) {
  64. super.onBoundsChange(bounds);
  65. int height = bounds.height();
  66. int width = bounds.width();
  67. numRectanglesHorizontal = (int) Math.ceil((width / mRectangleSize));
  68. numRectanglesVertical = (int) Math.ceil(height / mRectangleSize);
  69. generatePatternBitmap();
  70. }
  71. /**
  72. * This will generate a bitmap with the pattern
  73. * as big as the rectangle we were allow to draw on.
  74. * We do this to chache the bitmap so we don't need to
  75. * recreate it each time draw() is called since it
  76. * takes a few milliseconds.
  77. */
  78. private void generatePatternBitmap(){
  79. if(getBounds().width() <= 0 || getBounds().height() <= 0){
  80. return;
  81. }
  82. mBitmap = Bitmap.createBitmap(getBounds().width(), getBounds().height(), Config.ARGB_8888);
  83. Canvas canvas = new Canvas(mBitmap);
  84. Rect r = new Rect();
  85. boolean verticalStartWhite = true;
  86. for (int i = 0; i <= numRectanglesVertical; i++) {
  87. boolean isWhite = verticalStartWhite;
  88. for (int j = 0; j <= numRectanglesHorizontal; j++) {
  89. r.top = i * mRectangleSize;
  90. r.left = j * mRectangleSize;
  91. r.bottom = r.top + mRectangleSize;
  92. r.right = r.left + mRectangleSize;
  93. canvas.drawRect(r, isWhite ? mPaintWhite : mPaintGray);
  94. isWhite = !isWhite;
  95. }
  96. verticalStartWhite = !verticalStartWhite;
  97. }
  98. }
  99. }

Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable相关推荐

  1. Android 仿PhotoShop调色板应用(三) 主体界面绘制

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android 仿PhotoShop调色板应用(三) 主体界面绘制    关于PhotoShop调色板应用的实现我总结了两个最核心的部分:   1 ...

  2. Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应

     Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应  上一篇讲过了主体界面的绘制,这里讲解调色板应用中的另外一个核心: 颜色选择及生成. ColorPcikerVi ...

  3. Android自定义圆形调色板,可设置属性

    最近做项目需要用到调色板功能,本着不重复造轮子的想法,找到一个比较好的实现方式:Android 仿PhotoShop调色板应用.拿给老大看,老大说要做成RGB效果,不要HSV,因为不需要黑白色.好吧, ...

  4. android 自定义取色器,【Android自定义View】仿Photoshop取色器ColorPicker(二)

    ColorPicker 一款仿Photoshop取色器的Android版取色器. 前言 上一篇已经简单介绍了ColorPicker的项目结构以及两种颜色空间,接下来我们详细解析一下ColorPicke ...

  5. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  6. Android仿苹果版QQ下拉刷新实现(二) ——贝塞尔曲线开发鼻涕下拉粘连效果

    前言 接着上一期 Android仿苹果版QQ下拉刷新实现(一) --打造简单平滑的通用下拉刷新控件 的博客开始,同样,在开始前我们先来看一下目标效果: 下面上一下本章需要实现的效果图: 大家看到这个效 ...

  7. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  8. android 保险密码效果,本文实例为大家分享了android仿支付宝密码输入框展示的具体代码,供大家参考,具体内容如下这个没什么好分析的,就是一些基本的绘制什么线,矩形什么的,看代码更...

    本文实例为大家分享了android仿支付宝密码输入框展示的具体代码,供大家参考,具体内容如下 这个没什么好分析的,就是一些基本的绘制什么线,矩形什么的,看代码更具体 布局文件: android:lay ...

  9. Android仿微信小视频录制功能(二)

    Android仿微信小视频录制功能(二) 接着上一篇,在完成了录制功能后,伟大的哲学家沃兹基索德曾经说过:"有录就有放.",那么紧接着就来实现播放功能,按照国际惯例,先上下效果图: ...

最新文章

  1. 论机智,还是国产安卓旗舰花样多,从2999到10999元,各有各的“开窍点”
  2. Oracle中的date与timestamp
  3. c语言soket编程,C语言socket编程使用方法
  4. Redis的分布式锁详解
  5. crm开源系统 tp框架_八个开源的 Spring Boot 前后端分离项目,一定要收藏!
  6. java接口回调学习
  7. Java、Javascript、Javaweb三者的区别
  8. 人工智能TensorFlow工作笔记008---张量的使用
  9. bug4-UnknownError: Failed to get convolution algorithm. This is probably because cuDNN failed...
  10. Android 内存数据库
  11. IntelliJ IDEA 2017完全破解方法
  12. 软件测试用例设计包括哪些类型?
  13. html表格的形式制作调查问卷,问卷调查表格式,问卷调查怎么制作?
  14. 华为电脑安装双系统linux,华为MateBook笔记本安装Win10与Ubuntu双系统
  15. 时间固定效应和个体固定效应的选择_【十分钟计量经济学】面板数据选择固定效应还是随机效应...
  16. 分享解决jar包冲突问题的方法:(看了这个你就能解决所有包冲突问题!)
  17. Xcode13.3.1 upload ipa error:Invalid Provisioning Signature....STATE_ERROR.VALIDATION_ERROR.9016解决方案
  18. LeetCode琅琊榜第九层-加油站问题(图表法)
  19. 【JAVA长虹键法】第八式 代理模式(23种设计模式)
  20. 大型软件外包项目的开发流程

热门文章

  1. 阿里云服务器vCPU和CPU有什么区别?
  2. 读文献“大数据可视分析综述”
  3. USB转232串口驱动程序
  4. scp(安全拷贝)和rsync(增量复制)
  5. Mac 文件直接被永久删除,而不进垃圾箱 的 解决办法
  6. 普元 EOS定时任务实现原理
  7. python实现操作PG数据库
  8. 去哪儿网手机版机票数据
  9. HtmlUnit抓取Ajax网页,例子是去哪儿机票
  10. 【CSS】使HTML页面表格中文字水平且垂直居中的方法(易错)