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

目录(?)[+]

Android 颜色处理(十) ComposeShader组合渲染

public ComposeShader(Shader shaderA,Shader shaderB, Xfermode mode)

Parameters
shaderA 渲染器A,Shader及其子类对象
shaderB 渲染器B,Shader及其子类对象
mode  两种渲染器组合的模式,Xfermode对象

public ComposeShader(Shader shaderA,Shader shaderB, PorterDuff.Mode mode)

Parameters
shaderA 渲染器A,Shader及其子类对象
shaderB 渲染器B,Shader及其子类对象
mode .两种渲染器组合的模式,ProterDuff.Mode对象

Xfermode及ProterBuff.Mode具体含义见上一篇:

Android 颜色渲染(八) PorterDuff及Xfermode详解

ComposeShader,和AnimationSet的用法相似.是可以将两种颜色渲染器的效果进行组合:

以上图像由BimtmapShader和LinearGradient两种效果组合绘制,其中位图渲染 平铺模式使用的为镜像模式,  组合渲染使用了ProterDuff叠加模式,具体见如下代码:

MainActivity:

  1. package com.tony.testshader;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.graphics.Bitmap;
  5. import android.graphics.BitmapFactory;
  6. import android.view.Menu;
  7. import android.widget.SeekBar;
  8. import android.widget.SeekBar.OnSeekBarChangeListener;
  9. public class MainActivity extends Activity  implements OnSeekBarChangeListener{
  10. private SweepGradientView sweepGradientView;
  11. private ComposeShaderView composeShaderView;
  12. private SeekBar seekbar;
  13. private PorterDuffView porterDuffView;
  14. private int currentId;
  15. private WaterRipplesView waterRipplesView;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. composeShaderView = new ComposeShaderView(this);
  20. setContentView(composeShaderView);
  21. }
  22. @Override
  23. public boolean onCreateOptionsMenu(Menu menu) {
  24. getMenuInflater().inflate(R.menu.main, menu);
  25. return true;
  26. }
  27. }

ComposeShaderView:

    1. package com.tony.testshader;
    2. import android.content.Context;
    3. import android.graphics.Bitmap;
    4. import android.graphics.BitmapShader;
    5. import android.graphics.Canvas;
    6. import android.graphics.Color;
    7. import android.graphics.ComposeShader;
    8. import android.graphics.LinearGradient;
    9. import android.graphics.Paint;
    10. import android.graphics.PorterDuff;
    11. import android.graphics.Shader;
    12. import android.graphics.drawable.BitmapDrawable;
    13. import android.graphics.drawable.ShapeDrawable;
    14. import android.util.AttributeSet;
    15. import android.view.View;
    16. public class ComposeShaderView extends View {
    17. Bitmap mBitmap = null;
    18. int bitwidth = 0;
    19. int bitheight = 0;
    20. Paint mPaint = null;
    21. // bitmap渲染
    22. Shader mBitmapShader = null;
    23. // 线性渐变渲染
    24. Shader mLinearGradient = null;
    25. // 混合渲染
    26. Shader mComposeShader = null;
    27. ShapeDrawable mShapeDrawable = null;
    28. public ComposeShaderView(Context context) {
    29. super(context);
    30. // 装载资源
    31. mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.list_top))
    32. .getBitmap();
    33. // 得到宽高
    34. bitwidth = mBitmap.getWidth();
    35. bitheight = mBitmap.getHeight();
    36. // 创建BitmapShader对象
    37. mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR,
    38. Shader.TileMode.MIRROR);
    39. // 创建LinearGradient并设置渐变颜色数组,平铺效果为镜像
    40. mLinearGradient = new LinearGradient(0, 0, 0, 100, new int[] {
    41. Color.WHITE, Color.LTGRAY, Color.TRANSPARENT, Color.GREEN }, null,
    42. Shader.TileMode.MIRROR);
    43. // 混合渲染 将两个效果叠加,使用PorterDuff叠加模式
    44. mComposeShader = new ComposeShader(mBitmapShader, mLinearGradient,  PorterDuff.Mode.MULTIPLY);
    45. mPaint = new Paint();
    46. }
    47. public ComposeShaderView(Context context, AttributeSet attrs) {
    48. super(context, attrs);
    49. }
    50. @Override
    51. protected void onDraw(Canvas canvas) {
    52. super.onDraw(canvas);
    53. // 绘制混合渲染效果
    54. mPaint.setShader(mComposeShader);
    55. canvas.drawCircle(240, 360, 200, mPaint);
    56. }
    57. }

Android 颜色渲染(十) ComposeShader组合渲染的更多相关文章

  1. Android 颜色渲染(九) PorterDuff及Xfermode详解

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色渲染(九)  PorterDuff及Xfermode详解 之前已经讲过了除ComposeShader之外Shader的全部子类 ...

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

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

  3. Android 颜色渲染(六) RadialGradient 环形渲染

    Android 颜色处理(六) RadialGradient 环形渲染 public RadialGradient(float x, float y, float radius, int[] colo ...

  4. Android 颜色渲染(五) LinearGradient线性渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色处理(五) LinearGradient线性渲染 相信很多人都看过歌词同步的效果, 一是竖直方向的滚动,另一方面是水平方面的歌 ...

  5. Android 颜色渲染(四) BitmapShader位图渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色处理(四) BitmapShader位图渲染 public   BitmapShader(Bitmap bitmap,Shad ...

  6. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  7. Android 颜色渲染(八) SweepGradient扫描/梯度渲染

    版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] Android 颜色处理(八) SweepGradient 扫描/梯度渲染 为什么什么叫扫描渲染呢?  相信大家都看过雷达扫描的 ...

  8. Android 颜色渲染(一) 颜色选择器 ColorPickerDialog剖析

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android 颜色选择器之ColorPickerDialog剖析 有这样一个需求,可以让用户自定义背景颜色,这就需要提供一个颜色选择器给用户. ...

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

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

随机推荐

  1. ubuntu 14.04 安装preforce

    官网: http://www.perforce.com/ http://www.perforce.com/support-services 1. 下载相关文件 http://filehost.perf ...

  2. 软件测试software testing summarize

    软件测试(英语:software testing),描述一种用来促进鉴定软件的正确性.完整性.安全性和质量的过程.软件测试的经典定义是:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对 ...

  3. 利用servlet做转发,实现js跨域解决同源问题

    做前端开发,避免不了跨域这个问题,跨域具体什么概念,不赘述,博客里太多.简单说下,我们用js发请求,不管post还是get,如果发请求的对象和当前web页面不在同一域名下,浏览器的同源策略会限制发请求 ...

  4. Codeforces 446-C DZY Loves Fibonacci Numbers 同余 线段树 斐波那契数列

    C. DZY Loves Fibonacci Numbers time limit per test 4 seconds memory limit per test 256 megabytes inp ...

  5. 【Ireport】利用Ireport5.2的table组件迅速制作表格导出pdf

    转载请注明网址.Ireport table dataset Ireport在半年前还是4.7,今天无意发现,居然出到了5.2就搞一把. 首先,去下载Ireport,并进行安装.这个我就不演示了.下载完 ...

  6. quartz源码解析--转

    quartz源码解析(一)  . http://ssuupv.blog.163.com/blog//146156722013829111028966/ 任何个人.任何企业.任何行业都会有作业调度的需求 ...

  7. android Process.killProcess 和 System.exit(0) 区别

    1 Process.killProcess  和 System.exit(0) 两个都会 kill 掉当前进程. 你可以打开 DDMS 查看进程号,或 adb shell 进入 shell 然后 ps ...

  8. android——彻底关闭——应用程序

    最近学习做android的游戏开发时候,发现一个关于android退出时不能彻底关闭的问题,比如:一个程序里new 出了N多个Thread,这样在退出程序的可能不能完全关闭,最后发现,只用finish ...

  9. leetcode面试准备: Jump Game II

    1 题目 Given an array of non-negative integers, you are initially positioned at the first index of the ...

  10. 监控Activity在前后台状态的切换

    public class BaseActivity extends Activity{ @Overrideprotected void onStop() { boolean isOnForegroun ...