Android(安卓)颜色渲染(十) ComposeShader组合渲染
16lz
2021-12-04
Android 颜色渲染(十) ComposeShader组合渲染
分类:AndroidAndroid 颜色渲染 2013-09-03 20:13 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
- packagecom.tony.testshader;
- importandroid.os.Bundle;
- importandroid.app.Activity;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapFactory;
- importandroid.view.Menu;
- importandroid.widget.SeekBar;
- importandroid.widget.SeekBar.OnSeekBarChangeListener;
- publicclassMainActivityextendsActivityimplementsOnSeekBarChangeListener{
- privateSweepGradientViewsweepGradientView;
- privateComposeShaderViewcomposeShaderView;
- privateSeekBarseekbar;
- privatePorterDuffViewporterDuffView;
- privateintcurrentId;
- privateWaterRipplesViewwaterRipplesView;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- composeShaderView=newComposeShaderView(this);
- setContentView(composeShaderView);
- }
- @Override
- publicbooleanonCreateOptionsMenu(Menumenu){
- getMenuInflater().inflate(R.menu.main,menu);
- returntrue;
- }
- }
ComposeShaderView:
[java] view plain copy
- packagecom.tony.testshader;
- importandroid.content.Context;
- importandroid.graphics.Bitmap;
- importandroid.graphics.BitmapShader;
- importandroid.graphics.Canvas;
- importandroid.graphics.Color;
- importandroid.graphics.ComposeShader;
- importandroid.graphics.LinearGradient;
- importandroid.graphics.Paint;
- importandroid.graphics.PorterDuff;
- importandroid.graphics.Shader;
- importandroid.graphics.drawable.BitmapDrawable;
- importandroid.graphics.drawable.ShapeDrawable;
- importandroid.util.AttributeSet;
- importandroid.view.View;
- publicclassComposeShaderViewextendsView{
- BitmapmBitmap=null;
- intbitwidth=0;
- intbitheight=0;
- PaintmPaint=null;
- //bitmap渲染
- ShadermBitmapShader=null;
- //线性渐变渲染
- ShadermLinearGradient=null;
- //混合渲染
- ShadermComposeShader=null;
- ShapeDrawablemShapeDrawable=null;
- publicComposeShaderView(Contextcontext){
- super(context);
- //装载资源
- mBitmap=((BitmapDrawable)getResources().getDrawable(R.drawable.list_top))
- .getBitmap();
- //得到宽高
- bitwidth=mBitmap.getWidth();
- bitheight=mBitmap.getHeight();
- //创建BitmapShader对象
- mBitmapShader=newBitmapShader(mBitmap,Shader.TileMode.MIRROR,
- Shader.TileMode.MIRROR);
- //创建LinearGradient并设置渐变颜色数组,平铺效果为镜像
- mLinearGradient=newLinearGradient(0,0,0,100,newint[]{
- Color.WHITE,Color.LTGRAY,Color.TRANSPARENT,Color.GREEN},null,
- Shader.TileMode.MIRROR);
- //混合渲染将两个效果叠加,使用PorterDuff叠加模式
- mComposeShader=newComposeShader(mBitmapShader,mLinearGradient,PorterDuff.Mode.MULTIPLY);
- mPaint=newPaint();
- }
- publicComposeShaderView(Contextcontext,AttributeSetattrs){
- super(context,attrs);
- }
- @Override
- protectedvoidonDraw(Canvascanvas){
- super.onDraw(canvas);
- //绘制混合渲染效果
- mPaint.setShader(mComposeShader);
- canvas.drawCircle(240,360,200,mPaint);
- }
- }
更多相关文章
- android绘图看这篇就够了
- 分享方法:android 获得屏幕状态
- android:layout_gravity 和 android:gravity 的区别
- android:layout_gravity和android:gravity的区别
- android:layout_gravity 和 android:gravity 的区别
- Android(安卓)Application
- tools:context=".MainActivity的作用
- Android消息机制浅析——原理探究
- android:layout_gravity和android:gravity的区别