Android 颜色渲染 ComposeShader组合渲染

Posted brave-sailor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 颜色渲染 ComposeShader组合渲染相关的知识,希望对你有一定的参考价值。

目录(?)[+]

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.   
  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:

    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(0, 0, 0, 100, new 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(240, 360, 200, mPaint);  
    65.           
    66.     }  
    67.   

以上是关于Android 颜色渲染 ComposeShader组合渲染的主要内容,如果未能解决你的问题,请参考以下文章

Android 颜色渲染 LinearGradient线性渲染

Android 颜色渲染 RadialGradient 环形渲染

Android 颜色渲染 BitmapShader位图渲染

Android 颜色渲染 SweepGradient扫描/梯度渲染

Android UIPaint Gradient 渐变渲染 ① ( LinearGradient 线性渐变渲染 | 设置渲染方向 | 设置渲染颜色 | 设置渲染模式 | MIRROR )

Android 颜色渲染 颜色选择器 ColorPickerDialog剖析