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

分类:AndroidAndroid 颜色渲染 1186人阅读 评论(0) 收藏 举报

目录(?)[+]

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


publicComposeShader(ShadershaderA,ShadershaderB,Xfermodemode)

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

publicComposeShader(ShadershaderA,ShadershaderB,PorterDuff.Modemode)

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

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

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

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



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

MainActivity:

[java] view plain copy
  1. packagecom.tony.testshader;
  2. importandroid.os.Bundle;
  3. importandroid.app.Activity;
  4. importandroid.graphics.Bitmap;
  5. importandroid.graphics.BitmapFactory;
  6. importandroid.view.Menu;
  7. importandroid.widget.SeekBar;
  8. importandroid.widget.SeekBar.OnSeekBarChangeListener;
  9. publicclassMainActivityextendsActivityimplementsOnSeekBarChangeListener{
  10. privateSweepGradientViewsweepGradientView;
  11. privateComposeShaderViewcomposeShaderView;
  12. privateSeekBarseekbar;
  13. privatePorterDuffViewporterDuffView;
  14. privateintcurrentId;
  15. privateWaterRipplesViewwaterRipplesView;
  16. @Override
  17. protectedvoidonCreate(BundlesavedInstanceState){
  18. super.onCreate(savedInstanceState);
  19. composeShaderView=newComposeShaderView(this);
  20. setContentView(composeShaderView);
  21. }
  22. @Override
  23. publicbooleanonCreateOptionsMenu(Menumenu){
  24. getMenuInflater().inflate(R.menu.main,menu);
  25. returntrue;
  26. }
  27. }


ComposeShaderView:

[java] view plain copy
  1. packagecom.tony.testshader;
  2. importandroid.content.Context;
  3. importandroid.graphics.Bitmap;
  4. importandroid.graphics.BitmapShader;
  5. importandroid.graphics.Canvas;
  6. importandroid.graphics.Color;
  7. importandroid.graphics.ComposeShader;
  8. importandroid.graphics.LinearGradient;
  9. importandroid.graphics.Paint;
  10. importandroid.graphics.PorterDuff;
  11. importandroid.graphics.Shader;
  12. importandroid.graphics.drawable.BitmapDrawable;
  13. importandroid.graphics.drawable.ShapeDrawable;
  14. importandroid.util.AttributeSet;
  15. importandroid.view.View;
  16. publicclassComposeShaderViewextendsView{
  17. BitmapmBitmap=null;
  18. intbitwidth=0;
  19. intbitheight=0;
  20. PaintmPaint=null;
  21. //bitmap渲染
  22. ShadermBitmapShader=null;
  23. //线性渐变渲染
  24. ShadermLinearGradient=null;
  25. //混合渲染
  26. ShadermComposeShader=null;
  27. ShapeDrawablemShapeDrawable=null;
  28. publicComposeShaderView(Contextcontext){
  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=newBitmapShader(mBitmap,Shader.TileMode.MIRROR,
  38. Shader.TileMode.MIRROR);
  39. //创建LinearGradient并设置渐变颜色数组,平铺效果为镜像
  40. mLinearGradient=newLinearGradient(0,0,0,100,newint[]{
  41. Color.WHITE,Color.LTGRAY,Color.TRANSPARENT,Color.GREEN},null,
  42. Shader.TileMode.MIRROR);
  43. //混合渲染将两个效果叠加,使用PorterDuff叠加模式
  44. mComposeShader=newComposeShader(mBitmapShader,mLinearGradient,PorterDuff.Mode.MULTIPLY);
  45. mPaint=newPaint();
  46. }
  47. publicComposeShaderView(Contextcontext,AttributeSetattrs){
  48. super(context,attrs);
  49. }
  50. @Override
  51. protectedvoidonDraw(Canvascanvas){
  52. super.onDraw(canvas);
  53. //绘制混合渲染效果
  54. mPaint.setShader(mComposeShader);
  55. canvas.drawCircle(240,360,200,mPaint);
  56. }
  57. }

更多相关文章

  1. android绘图看这篇就够了
  2. 分享方法:android 获得屏幕状态
  3. android:layout_gravity 和 android:gravity 的区别
  4. android:layout_gravity和android:gravity的区别
  5. android:layout_gravity 和 android:gravity 的区别
  6. Android(安卓)Application
  7. tools:context=".MainActivity的作用
  8. Android消息机制浅析——原理探究
  9. android:layout_gravity和android:gravity的区别

随机推荐

  1. Android中操作SQLite数据库
  2. Android安装器(mac版) V1.0.0
  3. 创建和使用library
  4. [置顶] 如何使Android应用程序获取系统权
  5. Android(安卓)Studio 4.0 New Class 窗口
  6. Android中显式和隐式intent的特点和区别
  7. ffmpeg编译android 硬解码支持库 libstag
  8. android init.rc 修改方法---adb shell
  9. Android权威官方屏幕适配全攻略
  10. Andriod是什么