zoukankan      html  css  js  c++  java
  • 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.   
  • 相关阅读:
    线性分类器之感知机算法
    字符串包含判断
    王家林 云计算分布式大数据Hadoop实战高手之路从零开始 第二讲:全球最详细的从零起步搭建Hadoop单机和伪分布式开发环境图文教程
    王家林 第六讲Hadoop图文训练课程:使用HDFS命令行工具操作Hadoop分布式集群初体验
    王家林的“云计算分布式大数据Hadoop实战高手之路从零开始”的第五讲Hadoop图文训练课程:解决典型Hadoop分布式集群环境搭建问题
    王家林的 第三讲Hadoop图文训练课程:证明Hadoop工作的正确性和可靠性只需4步图文并茂的过程
    王家林 第四讲Hadoop图文训练课程:实战构建真正的Hadoop分布式集群环境
    麻雀GUIv1.0整理好咯,发个开源上来。
    body设置背景色异常
    safari浏览器placeholder垂直居中
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/5571864.html
Copyright © 2011-2022 走看看