因为公司在 自定义的画图上面比较苛刻(各种要求= =),最后又是改来改去的。反正是 Shader起到很大作用,特此记录一下下、在achartengine的基础上没有能满足他们= =

androd 提供了Shader类专门用来渲染图像以及一些几何图形。

自己写个class 继承 Vew

1.bitmap渲染器效果

2.线性渲染器效果

3.环形渲染器效果

4.混合渲染器效果

5.梯度渲染器效果

好了,下来直接放代码吧。注释都很清晰的说, 想要调整各种效果自己调整 X,Y 和type就好

  1. public class MyShaderView extends View {
  2.  
  3. // Shader渲染器 下面的都继承于 Shader 供了Shader类专门用来渲染图像以及一些几何图形。
  4.  
  5. BitmapShader bitmapShader; //bitmap渲染器
  6. ComposeShader composeShader; //混合渲染器
  7.  
  8. LinearGradient linearGradient; //线性渲染
  9. RadialGradient radialGradient; //圆形那种环形渲染
  10. SweepGradient sweepGradient; //梯度渲染器
  11. int width;
  12. int height;
  13.  
  14. public MyShaderView(Context context) {
  15. super(context);
  16.  
  17. //用 bitmap先渲染1个图片吧= =
  18. //先得到图片 drawable - bitmapDrawable
  19. BitmapDrawable bitmap_deawable = (BitmapDrawable) getResources().getDrawable(R.drawable.yingkou);
  20. //再得到 bitmap
  21. Bitmap bitmap = bitmap_deawable.getBitmap();
  22. width = bitmap.getWidth();
  23. height = bitmap.getHeight();
  24. //*******************************开始渲染bitmap图片
  25. // new BitmapShader(bitmap, tileX, tileY)
  26. // tileX The tiling mode for x to draw the bitmap in. 在位图上X方向花砖模式
  27. // tileY The tiling mode for y to draw the bitmap in. 在位图上Y方向花砖模式
  28. // CLAMP :如果渲染器超出原始边界范围,会复制范围内边缘染色。
  29. // REPEAT :横向和纵向的重复渲染器图片,平铺。
  30. // MIRROR :横向和纵向的重复渲染器图片,这个和REPEAT 重复方式不一样,他是以镜像方式平铺。
  31. bitmapShader = new BitmapShader(bitmap, TileMode.MIRROR, TileMode.MIRROR);
  32.  
  33. //******************************* LinearGradient 线性渲染
  34. // LinearGradient(float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode);
  35. // X0: 渐变起初点坐标x位置
  36. // y0: 渐变起初点坐标y位置
  37. // x1: 渐变终点坐标x位置
  38. // y1: 渐变终点坐标y位置
  39. // colors: 渐变颜色数组
  40. // positions:这个也是一个数组用来指定颜色数组的相对位置 如果为null 就沿坡度线均匀分布
  41. // tile:渲染模式(平铺方式)
  42. linearGradient = new LinearGradient(50, 50,1000,1000, new int[]{Color.RED, Color.GREEN, Color.BLUE, Color.WHITE},
  43. null,Shader.TileMode.REPEAT);
  44.  
  45. //******************************* radialGradient 环形渲染
  46. // x y 半径 渐变颜色数组 position 平铺方式
  47. //多色
  48. radialGradient = new RadialGradient( 50,200,50,new int[]{Color.WHITE,Color.YELLOW,Color.GREEN,Color.RED,Color.BLUE,},
  49. null,Shader.TileMode.REPEAT);
  50. //单色 + 边框- 这个真心是应了 需求。。必须实心-为的是不露出后面的东西(paint本身画出来的设置空心会漏)
  51. //radialGradient = new RadialGradient( 50,200, 50, new int[]
  52. //{Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,Color.WHITE,
  53. //Color.WHITE,Color.RED},
  54. //null,Shader.TileMode.REPEAT);
  55.  
  56. //******************************* composeShader 混合渲染
  57. composeShader = new ComposeShader(bitmapShader,linearGradient,PorterDuff.Mode.DARKEN);
  58. //最后的 混合渲染模式有  PorterDuff.Mode有16种参数可供选择,下面有效果图
  59. //分别为:CLEAR、SRC、DST、SRC_OVER、DST_OVER、SRC_IN、DST_IN、SRC_OUT、DST_OUT、
  60. // SRC_ATOP、DST_ATOP、 XOR、DARKEN、LIGHTEN、MULTIPLY、SCREEN。
  61.  
  62. //******************************* sweepGradient 梯度渲染器
  63. sweepGradient = new SweepGradient(30,30,new int[]{Color.GREEN,Color.RED,Color.BLUE,Color.WHITE},null);
  64. }
  65.  
  66. @Override
  67. protected void onDraw(Canvas canvas) {
  68. super.onDraw(canvas);
  69.  
  70. //构建ShapeDrawable对象并定义形状为椭圆
  71. // RectShape
  72. // ArcShape
  73. // RectShape
  74. //1.可以这样写
  75. //ShapeDrawable shapeDrawable = new ShapeDrawable(new OvalShape());
  76. //得到画笔并设置渲染器
  77. // shapeDrawable.getPaint().setShader(bitmapShader);
  78. //设置显示区域
  79. // shapeDrawable.setBounds(20, 20, width-10, height-10);
  80. //绘制shapeDrawable
  81. // shapeDrawable.draw(canvas);
  82.  
  83. // 2.也可以这样写
  84. Paint paint = new Paint();
  85. canvas.drawColor(Color.WHITE); //背景置为灰色
  86.  
  87. //绘制Bitmap渲染的椭圆
  88. paint.setShader(bitmapShader);
  89. canvas.drawOval(new RectF(90, 20, 90+ width, 20+ height), paint);
  90.  
  91. //绘制线性渐变的矩形
  92. paint.setShader(linearGradient);
  93. canvas.drawRect(10, 200, 200, 400, paint);
  94.  
  95. //绘制环形渐变的圆
  96. paint.setShader(radialGradient);
  97. canvas.drawCircle(50,200,50, paint);
  98.  
  99. //绘制混合渐变(线性与环形混合)的矩形
  100. paint.setShader(composeShader);
  101. canvas.drawRect(0, 0, 1000, 1000, paint);
  102.  
  103. //绘制梯形渐变的矩形
  104. paint.setShader(sweepGradient);
  105. canvas.drawRect(50, 50, 300, 300, paint);
  106.  
  107. }
  108. }

下面这张图是上面提到的混合 渲染器,16个每种type的样式

关于 android的 渲染器 Shader的更多相关文章

  1. Android渲染器Shader:环状放射渐变渲染器RadialGradient(三)

     Android渲染器Shader:环状放射渐变渲染器RadialGradient(三) Android RadialGradient渲染器提供一种环状.发散.放射形状的渐变渲染器. 写一个例子: ...

  2. Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)

     Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二) 附录文章1介绍了线性渐变渲染器. Android的SweepGradient梯度渐变扫描,重点是在构造Swe ...

  3. Android渲染器Shader:LinearGradient(一)

     Android渲染器Shader:LinearGradient(一) LinearGradient是Android的线性渲染器.我写5个LinearGradient渲染器渲染后的View表现结果 ...

  4. 通过渲染器Shader实现图像变换效果

    在上一篇文章中,一起学习了通过设定画笔风格来实现图形变换,没读过的朋友可以点击下面链接: http://www.cnblogs.com/fuly550871915/p/4886455.html 是不是 ...

  5. 渲染器 Shader BitmapShader

    渲染模式: tileX tileY:The tiling mode for x/y to draw the bitmap in.   在位图上 X/Y 方向 瓦工/花砖/瓷砖 模式 CLAMP  :如 ...

  6. 基于OpenGL编写一个简易的2D渲染框架-09 重构渲染器-Shader

    Shader 只是进行一些简单的封装,主要功能: 1.编译着色程序 2.绑定 Uniform 数据 3.根据着色程序的顶点属性传递顶点数据到 GPU 着色程序的编译 GLuint Shader::cr ...

  7. Android 颜色渲染(三) Shader颜色渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. 相信看过在上一篇中提到的三篇文章后,大家已经对颜色处理方面有更深的体会. 之前讲到颜色渐变的效果, 具体怎么做呢,这就需要应用颜色渲染. 首先要介 ...

  8. Android学习笔记12:图像渲染(Shader)

    在Android中,提供了Shader类专门用来渲染图像以及一些几何图形. Shader类包括了5个直接子类,分别为:BitmapShader.ComposeShader.LinearGradient ...

  9. android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器

    BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...

随机推荐

  1. Java Web开发 之小张老师总结GET和POST区别

    get和post区别1.传输方式不同,get在request-line中传输(即在URL中传输).post在request-line及 request-body中传输(可认为隐藏传输)2.get传输长 ...

  2. Java泛型:类型擦除

    类型擦除 代码片段一 Class c1 = new ArrayList<Integer>().getClass(); Class c2 = new ArrayList<String& ...

  3. 【.Net免费公开课】--授技.Net中的高帅富技术-"工作流"

    课程简介 免费公开课主题: .Net中的高帅富技术-“工作流” 公开课开课时间:     10月17日 19:30--21:30 公开课YY频道:       85155393   (重要:公开课QQ ...

  4. 2.2linux内核移植简介

    1,编译linux3.5出错 root@phone-desktop:/opt/FriendlyARM/tiny4412/Linux/linux-3.5# makescripts/kconfig/con ...

  5. FTPClient 工具类

    package com.photoann.core.util; import java.io.BufferedInputStream; import java.io.File; import java ...

  6. API HOOK技术

    API HOOK技术是一种用于改变API执行结果的技术,Microsoft 自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等. API HOOK 技术并不是计算机病毒专有技 ...

  7. 深入理解Java虚拟机 - 垃圾收集概述

    首先需要澄清的是,垃圾收集(GC)的历史远比Java要久远,当我们意识到手动管理内存所带来的麻烦时,懒惰的天性推动先驱们寻找更为简单.易用.关键是傻瓜式的内存管理技术.GC技术起源于1960年诞生于M ...

  8. poj2436,poj3659,poj2430

    这两题都体现了dp的核心:状态 dp做多就发现,状态一设计出来,后面的什么都迎刃而解了(当然需要优化的还要动动脑筋): 先说比较简单的: poj2436 由题得知病毒种数<=15很小,于是我们就 ...

  9. apache开源项目--solr

    solr 名称来源 Search On Lucene Replication solr 基本概况 Apache Solr (读音: SOLer) 是一个开源的搜索服务器.Solr 使用 Java 语言 ...

  10. Windows安装weblogic

    WebLogic安装结束 以下是进入MyEclipse启动配置WebLogic