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

来源:互联网 发布:和msqrd差不多的软件 编辑:程序博客网 时间:2024/05/17 21:50

转自:http://blog.csdn.net/t12x3456/article/details/10366131


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:

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


ComposeShaderView:

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



  


0 0
原创粉丝点击