Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable
来源:互联网 发布:响应式论坛社区源码 编辑:程序博客网 时间:2024/05/20 21:44
Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable
这里讲一下如何实现PS调色板中的透明度选择条.首先说一下要点:
1. 透明度选择条实际上是基于白色(0xffffffff)和灰色(0xffcbcbcb)之间的颜色区间选取, 由此我们可以实现一个半透明颜色的选取
2.该应用不仅可以做透明度颜色选取,也可以在应用中实现半透明的图像效果
下面看一下代码,主要是基于Drawable的重写:
- /*
- * Copyright (C) 2010 Daniel Nilsson
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package net.margaritov.preference.colorpicker;
- import android.graphics.Bitmap;
- import android.graphics.Bitmap.Config;
- import android.graphics.Canvas;
- import android.graphics.ColorFilter;
- import android.graphics.Paint;
- import android.graphics.Rect;
- import android.graphics.drawable.Drawable;
- /**
- * This drawable that draws a simple white and gray chessboard pattern.
- * It's pattern you will often see as a background behind a
- * partly transparent image in many applications.
- * @author Daniel Nilsson
- */
- public class AlphaPatternDrawable extends Drawable {
- private int mRectangleSize = 10;
- private Paint mPaint = new Paint();
- private Paint mPaintWhite = new Paint();
- private Paint mPaintGray = new Paint();
- private int numRectanglesHorizontal;
- private int numRectanglesVertical;
- /**
- * Bitmap in which the pattern will be cahched.
- */
- private Bitmap mBitmap;
- public AlphaPatternDrawable(int rectangleSize) {
- mRectangleSize = rectangleSize;
- mPaintWhite.setColor(0xffffffff);
- mPaintGray.setColor(0xffcbcbcb);
- }
- @Override
- public void draw(Canvas canvas) {
- canvas.drawBitmap(mBitmap, null, getBounds(), mPaint);
- }
- @Override
- public int getOpacity() {
- return 0;
- }
- @Override
- public void setAlpha(int alpha) {
- throw new UnsupportedOperationException("Alpha is not supported by this drawwable.");
- }
- @Override
- public void setColorFilter(ColorFilter cf) {
- throw new UnsupportedOperationException("ColorFilter is not supported by this drawwable.");
- }
- @Override
- protected void onBoundsChange(Rect bounds) {
- super.onBoundsChange(bounds);
- int height = bounds.height();
- int width = bounds.width();
- numRectanglesHorizontal = (int) Math.ceil((width / mRectangleSize));
- numRectanglesVertical = (int) Math.ceil(height / mRectangleSize);
- generatePatternBitmap();
- }
- /**
- * This will generate a bitmap with the pattern
- * as big as the rectangle we were allow to draw on.
- * We do this to chache the bitmap so we don't need to
- * recreate it each time draw() is called since it
- * takes a few milliseconds.
- */
- private void generatePatternBitmap(){
- if(getBounds().width() <= 0 || getBounds().height() <= 0){
- return;
- }
- mBitmap = Bitmap.createBitmap(getBounds().width(), getBounds().height(), Config.ARGB_8888);
- Canvas canvas = new Canvas(mBitmap);
- Rect r = new Rect();
- boolean verticalStartWhite = true;
- for (int i = 0; i <= numRectanglesVertical; i++) {
- boolean isWhite = verticalStartWhite;
- for (int j = 0; j <= numRectanglesHorizontal; j++) {
- r.top = i * mRectangleSize;
- r.left = j * mRectangleSize;
- r.bottom = r.top + mRectangleSize;
- r.right = r.left + mRectangleSize;
- canvas.drawRect(r, isWhite ? mPaintWhite : mPaintGray);
- isWhite = !isWhite;
- }
- verticalStartWhite = !verticalStartWhite;
- }
- }
- }
- <pre name="code" class="java"><pre></pre><pre></pre><pre></pre><pre></pre><pre></pre><pre></pre><pre></pre><pre></pre><pre></pre><pre></pre></pre>
0 0
- Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable
- Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable
- Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable
- Android 仿PhotoShop调色板应用(三) 主体界面绘制
- Android 仿PhotoShop调色板应用(三) 主体界面绘制
- Android 仿PhotoShop调色板应用(一)概述
- Android 仿PhotoShop调色板应用(一)概述
- Android 仿PhotoShop调色板应用(一)概述
- Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应
- Android 仿PhotoShop调色板应用(四) 不同区域颜色选择的颜色生成响应
- 【Android自定义View】仿Photoshop取色器ColorPicker(二)
- Android进阶——自定义View之自己绘制彩虹圆环调色板
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- Android应用经典主界面框架之二:仿网易新闻客户端、CSDN 客户端 (Fragment ViewPager)
- tomcat服务器使用注意事项
- Android 仿PhotoShop调色板应用(一)概述
- 回首过去,展望未来——2013年个人年终总结
- ZeroMQ(java)中监控Socket
- Windows下通过SSH使用SharpSSH远程登录主机执行命令传输文件
- Android 仿PhotoShop调色板应用(二) 透明度绘制之AlphaPatternDrawable
- Android开发环境搭建全程演示(jdk+eclipse+android sdk)
- 数据分析和《古惑仔》电影中总结出的流氓数据陷阱
- 解剖学口诀
- 解析Json文本——如何将Json文本转化为Java对象
- 监测TextField实时变化
- ProcessBuilder.start() 和 Runtime.exec()
- 在树莓派2上安装xbmc
- freemarker类型转换