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

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

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

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

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

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

  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调色板应用(四) 不同区域颜色选择的颜色生成响应  上一篇讲过了主体界面的绘制,这里讲解调色板应用中的另外一 ...

  3. Android 仿PhotoShop调色板应用(一)概述

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在前面的系列我已经将Android中颜色渲染的原理及使用做了一个整体上概述. 现在开始根据一个比较复杂的实现进行具体的分析,这就是PhotoSho ...

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

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

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

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

  6. 商城项目实战 | 2.2 Android 仿京东商城——自定义 Toolbar (二)

    本文为菜鸟窝作者刘婷的连载."商城项目实战"系列来聊聊仿"京东淘宝的购物商城"如何实现. 上一篇文章<商城项目实战 | 2.1 Android 仿京东商城 ...

  7. Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等

    仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...

  8. android仿漫画源码、抽奖转盘、Google相册、动画源码等

    Android精选源码 android实现仿今日头条的开源项目 波浪效果,实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差 ...

  9. Android 仿知乎创意广告

    代码地址如下:http://www.demodashi.com/demo/14904.html 一.概述 貌似前段时间刷知乎看到的一种非常有特色的广告展现方式,即在列表页,某一个Item显示背后部分广 ...

随机推荐

  1. 网站商务通链接快速标识v1.0.js

    js代码为: function getSwt(keys){ try{ if(openZoosUrl&&typeof(openZoosUrl)=="function" ...

  2. IE6 Bug overflow:hidden失效

    下面就是我所收集或遇到的IE6 Bug之一:overflow:hidden失效 当父元素的直接子元素或者下级子元素的样式拥有position:relative属性时,父元素的overflow:hidd ...

  3. Cohort Analysis Using Python

    Cohort Analysis是将某一个时期内的用户划分为一个cohort,并将多个cohort进行时间上的某个属性的比较的一种分析方法.Cohort Analysis在有些场景下非常有用.比如一个网 ...

  4. C#中的泛型-1

    在软件这个行业,做的越久,往往会觉得很多技术问题最终会偏向数据结构和算法. 记得曾经大学的一堂课上,老师讲了一个关于冒泡排序的算法,下面是课本上的标准实现. public class Sort { p ...

  5. 关于UPdate用法的

    updaterestore_base  set  restore_base.localcost =(select   localcost  from    [nt2000\cpi].chongia2. ...

  6. VC 项目支撑文件解释

    1.解决方案文件:   a.sln 解决方案.把项目中的所有元素或者多个项目整合到一个解决方案中去. b.suo 解决方案定制项.存储用户级别对解决方案的定制,比如打开状态,断点信息.   这两个文件 ...

  7. Contest20140711 loop 数论

    loop|loop.in|loop.out 题目描述: 有N个点. 现在重复这样的操作: 随机找一个出度为0的点p1,随机找一个入度为0的点p2,连一条有向边从p1指向p2.直到没有出度为0的点. 统 ...

  8. Codeforces Round #205 (Div. 2) : B

    如果某个数出现的次数大于或等于2次,那么平均分配到两个容器里面: 这里利用一个k来使得当出现次数为奇数时候分配得更加均匀: 剩下的就平均分配到两个容器里: 代码: #include<iostre ...

  9. Musical Theme

    poj1743:http://poj.org/problem?id=1743 题意:题意抽象出来就是给你一个序列,然后找一个长度不少于5的没有重复的等差数列. 题解:每相邻的两个数做差,然后转化成求字 ...

  10. ssh 认证指定端口

    [root@database2 ~]# cat ssh.sh if [ ! $# -eq 2 ] ;then echo "请输入用户密码以空格分开" exit else ssh-k ...