渲染器 Shader BitmapShader
渲染模式示例代码
public class LinearGradientView extends View {private Paint mPaint = null;private Shader mLinearGradient11 = null;private Shader mLinearGradient12 = null;private Shader mLinearGradient13 = null;private Shader mLinearGradient21 = null;private Shader mLinearGradient22 = null;private Shader mLinearGradient23 = null;private Shader mLinearGradient31 = null;private Shader mLinearGradient32 = null;private Shader mLinearGradient33 = null;public LinearGradientView(Context context) {super(context);// 第一第二个参数表示渐变起点,可以设置在对角等任意位置;第三第四个参数表示渐变终点;第五个参数表示渐变颜色;// 第六个参数可以为空,表示坐标值为0-1 new float[] {0.25f, 0.5f, 0.75f, 1 } 如果为空,颜色均匀分布,沿梯度线。mLinearGradient11 = new LinearGradient(0, 0, 0, 200, new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.BLACK }, null, TileMode.CLAMP);mLinearGradient12 = new LinearGradient(0, 0, 0, 300, new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.BLACK }, new float[] { 0, 0.1f, 0.5f, 0.5f }, TileMode.CLAMP);mLinearGradient13 = new LinearGradient(0, 0, 0, 400, new int[] { Color.RED, Color.GREEN, Color.BLUE }, null, TileMode.CLAMP);mLinearGradient21 = new LinearGradient(0, 320, 0, 320 + 200, new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.BLACK }, null, TileMode.MIRROR);mLinearGradient22 = new LinearGradient(0, 320, 0, 320 + 100, new int[] { Color.RED, Color.GREEN, Color.BLUE }, null, TileMode.MIRROR);mLinearGradient23 = new LinearGradient(0, 320, 0, 320 + 100, new int[] { Color.RED, Color.GREEN, Color.BLUE }, new float[] { 0, 0.1f, 0.5f }, TileMode.MIRROR);mLinearGradient31 = new LinearGradient(0, 640, 0, 640 + 200, new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.BLACK }, null, TileMode.REPEAT);mLinearGradient32 = new LinearGradient(0, 640, 0, 640 + 100, new int[] { Color.RED, Color.GREEN, Color.BLUE }, null, TileMode.REPEAT);mLinearGradient33 = new LinearGradient(0, 640, 0, 640 + 100, new int[] { Color.RED, Color.GREEN, Color.BLUE }, new float[] { 0, 0.1f, 0.5f }, TileMode.REPEAT);mPaint = new Paint();}@Overrideprotected void onDraw(Canvas canvas) {//重复最后一个像素mPaint.setStrokeWidth(2);mPaint.setShader(mLinearGradient11);canvas.drawRect(0, 0, 200, 300, mPaint);//200-300之间全部是最后的黑色mPaint.setShader(mLinearGradient12);canvas.drawRect(210, 0, 410, 300, mPaint);//0.5之后全部是黑色了mPaint.setShader(mLinearGradient13);canvas.drawRect(420, 0, 620, 300, mPaint); // LinearGradient的高度小于要绘制的矩形的高度时才会有重复、镜像等效果canvas.drawLine(0, 310, 720, 310, mPaint);//镜像效果mPaint.setShader(mLinearGradient21);canvas.drawRect(0, 320, 200, 620, mPaint);mPaint.setShader(mLinearGradient22);canvas.drawRect(210, 320, 410, 620, mPaint);mPaint.setShader(mLinearGradient23);canvas.drawRect(420, 320, 620, 620, mPaint);canvas.drawLine(0, 630, 720, 630, mPaint);//重复效果mPaint.setShader(mLinearGradient31);canvas.drawRect(0, 640, 200, 940, mPaint);mPaint.setShader(mLinearGradient32);canvas.drawRect(210, 640, 410, 940, mPaint);mPaint.setShader(mLinearGradient33);canvas.drawRect(420, 640, 620, 940, mPaint);}}
渲染器示例代码
public class MyShaderView extends View {// Shader渲染器,专门用来渲染图像以及一些几何图形private BitmapShader bitmapShader; //bitmap渲染器,主要用来渲染图像private LinearGradient linearGradient; //线性渲染private RadialGradient radialGradient; //环形渲染private SweepGradient sweepGradient; //扫描渐变,围绕一个中心点扫描渐变就像电影里那种雷达扫描,用来梯度渲染private ComposeShader composeShader; //混合渲染器,可以和其他几个子类组合起来使用private Bitmap bitmap;/**Bitmap的宽高*/private int width, height;private Paint paint;/**渐变颜色数组*/private final int[] colors = { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW };/**用来指定颜色数组的相对位置,若为null则均匀分布*/private final float[] positions = null;public MyShaderView(Context context) {super(context);bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.icon)).getBitmap();width = bitmap.getWidth();height = bitmap.getHeight();paint = new Paint();}@SuppressLint("DrawAllocation")@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.WHITE); //背景色//将Bitmap截取为圆形、圆角矩形canvas.drawBitmap(bitmap, 0, 0, paint);//原图bitmapShader = new BitmapShader(bitmap, TileMode.MIRROR, TileMode.MIRROR);paint.setShader(bitmapShader);canvas.drawOval(new RectF(width, 0, width * 2, height), paint);//圆形渲染图canvas.drawRoundRect(width * 2, 0, width * 3, height, 30, 30, paint);//矩形渲染图//绘制线性渐变的矩形linearGradient = new LinearGradient(0, 200, 400, 400, colors, positions, TileMode.REPEAT);// 渐变起 初点/终点坐标 x/y 位置;paint.setShader(linearGradient);canvas.drawRect(0, 200, 400, 400, paint);//渲染范围最好和图形大小一致//绘制环形渐变的圆和矩形radialGradient = new RadialGradient(100, 500, 100, colors, positions, TileMode.REPEAT);// 中心坐标、半径paint.setShader(radialGradient);canvas.drawCircle(100, 500, 100, paint);canvas.drawRect(200, 400, 300, 600, paint);radialGradient = new RadialGradient(300, 500, 100, colors, positions, TileMode.MIRROR);paint.setShader(radialGradient);canvas.drawCircle(400, 500, 100, paint);canvas.drawRect(500, 400, 600, 600, paint);//绘制梯形渐变的矩形sweepGradient = new SweepGradient(300, 710, colors, positions);//中心坐标paint.setShader(sweepGradient);canvas.drawRect(0, 610, 600, 810, paint);//绘制混合渐变(线性与环形混合)的矩形linearGradient = new LinearGradient(0, 820, 300, 1120, colors, positions, TileMode.REPEAT);composeShader = new ComposeShader(linearGradient, bitmapShader, PorterDuff.Mode.SRC_OVER);paint.setShader(composeShader);canvas.drawRect(0, 820, 600, 1120, paint);}}
渲染器 Shader BitmapShader的更多相关文章
- 通过渲染器Shader实现图像变换效果
在上一篇文章中,一起学习了通过设定画笔风格来实现图形变换,没读过的朋友可以点击下面链接: http://www.cnblogs.com/fuly550871915/p/4886455.html 是不是 ...
- Android渲染器Shader:环状放射渐变渲染器RadialGradient(三)
Android渲染器Shader:环状放射渐变渲染器RadialGradient(三) Android RadialGradient渲染器提供一种环状.发散.放射形状的渐变渲染器. 写一个例子: ...
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)
Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二) 附录文章1介绍了线性渐变渲染器. Android的SweepGradient梯度渐变扫描,重点是在构造Swe ...
- Android渲染器Shader:LinearGradient(一)
Android渲染器Shader:LinearGradient(一) LinearGradient是Android的线性渲染器.我写5个LinearGradient渲染器渲染后的View表现结果 ...
- Android Shader渲染器:BitmapShader图片渲染
public class BitmapShader extends Shader BitmapShader, Shader家族的 专门处理图片渲染的 构造方法: public BitmapShade ...
- 关于 android的 渲染器 Shader
因为公司在 自定义的画图上面比较苛刻(各种要求= =),最后又是改来改去的.反正是 Shader起到很大作用,特此记录一下下.在achartengine的基础上没有能满足他们= = androd 提供 ...
- 基于OpenGL编写一个简易的2D渲染框架-09 重构渲染器-Shader
Shader 只是进行一些简单的封装,主要功能: 1.编译着色程序 2.绑定 Uniform 数据 3.根据着色程序的顶点属性传递顶点数据到 GPU 着色程序的编译 GLuint Shader::cr ...
- android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器
BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...
- Android学习笔记12:图像渲染(Shader)
在Android中,提供了Shader类专门用来渲染图像以及一些几何图形. Shader类包括了5个直接子类,分别为:BitmapShader.ComposeShader.LinearGradient ...
随机推荐
- LINUX系统安装MYSQL命令,纯手打
1.下载安装包 wget http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz 2. ...
- 零散的笔记:jquery中的事件
1.替代mouseover和mouseout的事件 jquery的mouseover和mouseout事件在移到子页面时也会触发,这在移到一级菜单弹出二级菜单,移到二级菜单时一级菜单也要显示时,这两个 ...
- [javascript]js修改title
使用javascript修改title 1.这个在chrome中可以成功,在ie8中报错 <!DOCTYPE html> <html> <head> <tit ...
- 数据结构 --- 线性表学习(php模拟)
线性表:零个或多个数据元素的有限序列(注:以下都是用的整型数据模拟) 一 顺序存储结构(用一段地址连续的存储单元一次存储线性表的数据元素) 1.1 三个属性:存储空间的起始位置:最大存储容量:当前长度 ...
- Smarty 模板引擎 fetch()和display()函数的区别?
Smarty模板函数里面有这样一个方法:fetch("template.htm"),他和display("template.htm");最大的不同就是fetch ...
- C# 代码中 计算某个函数 或WebService 请求花费时间
/// 计算请求所花费的时间 System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Start( ...
- nil、Nil、NULL与NSNull的区别--备用
我们来分别介绍一下这四种类型: 一.nil 我们给对象赋值时一般会使用object = nil,表示我想把这个对象释放掉: 或者对象由于某种原因,经过多次release,于是对象引用计数器为0了,系统 ...
- ClipDrawable 资源
ClipDrawable 代表从其他位图上截取的一个“图片片段”. 示例: main.xml <?xml version="1.0" encoding="utf-8 ...
- 如何修正Feedly文章中文標題亂碼或無法正常顯示的問題
在7月1日Google關閉Reader之前,我想應該有許多人都已經從Google Reader移到其他服務上了,其中受益最大的者莫過於Feedly了,一下子就吸收了幾百萬的用戶,而我也是其中之一,由於 ...
- 为什么 O2O 领域融资额特别高?
在36氪搜索“o2o”,融资额基本都是数千万乃至数亿,为什么这个领域的创业项目融资额如此之高?融到的钱一般用在什么地方? --------------------------------------- ...

