Android 颜色渲染(十) ComposeShader组合渲染
2016-03-18 14:44
411 查看
转自:http://blog.csdn.net/t12x3456/article/details/10366131
Android 颜色处理(十) ComposeShader组合渲染
Xfermode及ProterBuff.Mode具体含义见上一篇:
Android 颜色渲染(八) PorterDuff及Xfermode详解
ComposeShader,和AnimationSet的用法相似.是可以将两种颜色渲染器的效果进行组合:
以上图像由BimtmapShader和LinearGradient两种效果组合绘制,其中位图渲染 平铺模式使用的为镜像模式, 组合渲染使用了ProterDuff叠加模式,具体见如下代码:
MainActivity:
[java] view
plain copy
package com.tony.testshader;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity implements OnSeekBarChangeListener{
private SweepGradientView sweepGradientView;
private ComposeShaderView composeShaderView;
private SeekBar seekbar;
private PorterDuffView porterDuffView;
private int currentId;
private WaterRipplesView waterRipplesView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
composeShaderView = new ComposeShaderView(this);
setContentView(composeShaderView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ComposeShaderView:
[java] view
plain copy
package com.tony.testshader;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposeShader;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.util.AttributeSet;
import android.view.View;
public class ComposeShaderView extends View {
Bitmap mBitmap = null;
int bitwidth = 0;
int bitheight = 0;
Paint mPaint = null;
// bitmap渲染
Shader mBitmapShader = null;
// 线性渐变渲染
Shader mLinearGradient = null;
// 混合渲染
Shader mComposeShader = null;
ShapeDrawable mShapeDrawable = null;
public ComposeShaderView(Context context) {
super(context);
// 装载资源
mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.list_top))
.getBitmap();
// 得到宽高
bitwidth = mBitmap.getWidth();
bitheight = mBitmap.getHeight();
// 创建BitmapShader对象
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR,
Shader.TileMode.MIRROR);
// 创建LinearGradient并设置渐变颜色数组,平铺效果为镜像
mLinearGradient = new LinearGradient(0, 0, 0, 100, new int[] {
Color.WHITE, Color.LTGRAY, Color.TRANSPARENT, Color.GREEN }, null,
Shader.TileMode.MIRROR);
// 混合渲染 将两个效果叠加,使用PorterDuff叠加模式
mComposeShader = new ComposeShader(mBitmapShader, mLinearGradient, PorterDuff.Mode.MULTIPLY);
mPaint = new Paint();
}
public ComposeShaderView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制混合渲染效果
mPaint.setShader(mComposeShader);
canvas.drawCircle(240, 360, 200, mPaint);
}
}
Android 颜色处理(十) ComposeShader组合渲染
public ComposeShader(Shader shaderA,Shader shaderB, Xfermode mode)
ParametersshaderA | 渲染器A,Shader及其子类对象 |
---|---|
shaderB | 渲染器B,Shader及其子类对象 |
mode | 两种渲染器组合的模式,Xfermode对象 |
public ComposeShader(Shader shaderA,Shader shaderB, PorterDuff.Mode mode)
ParametersshaderA | 渲染器A,Shader及其子类对象 |
---|---|
shaderB | 渲染器B,Shader及其子类对象 |
mode | .两种渲染器组合的模式,ProterDuff.Mode对象 |
Android 颜色渲染(八) PorterDuff及Xfermode详解
ComposeShader,和AnimationSet的用法相似.是可以将两种颜色渲染器的效果进行组合:
以上图像由BimtmapShader和LinearGradient两种效果组合绘制,其中位图渲染 平铺模式使用的为镜像模式, 组合渲染使用了ProterDuff叠加模式,具体见如下代码:
MainActivity:
[java] view
plain copy
package com.tony.testshader;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Menu;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity implements OnSeekBarChangeListener{
private SweepGradientView sweepGradientView;
private ComposeShaderView composeShaderView;
private SeekBar seekbar;
private PorterDuffView porterDuffView;
private int currentId;
private WaterRipplesView waterRipplesView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
composeShaderView = new ComposeShaderView(this);
setContentView(composeShaderView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
ComposeShaderView:
[java] view
plain copy
package com.tony.testshader;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ComposeShader;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Shader;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.util.AttributeSet;
import android.view.View;
public class ComposeShaderView extends View {
Bitmap mBitmap = null;
int bitwidth = 0;
int bitheight = 0;
Paint mPaint = null;
// bitmap渲染
Shader mBitmapShader = null;
// 线性渐变渲染
Shader mLinearGradient = null;
// 混合渲染
Shader mComposeShader = null;
ShapeDrawable mShapeDrawable = null;
public ComposeShaderView(Context context) {
super(context);
// 装载资源
mBitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.list_top))
.getBitmap();
// 得到宽高
bitwidth = mBitmap.getWidth();
bitheight = mBitmap.getHeight();
// 创建BitmapShader对象
mBitmapShader = new BitmapShader(mBitmap, Shader.TileMode.MIRROR,
Shader.TileMode.MIRROR);
// 创建LinearGradient并设置渐变颜色数组,平铺效果为镜像
mLinearGradient = new LinearGradient(0, 0, 0, 100, new int[] {
Color.WHITE, Color.LTGRAY, Color.TRANSPARENT, Color.GREEN }, null,
Shader.TileMode.MIRROR);
// 混合渲染 将两个效果叠加,使用PorterDuff叠加模式
mComposeShader = new ComposeShader(mBitmapShader, mLinearGradient, PorterDuff.Mode.MULTIPLY);
mPaint = new Paint();
}
public ComposeShaderView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 绘制混合渲染效果
mPaint.setShader(mComposeShader);
canvas.drawCircle(240, 360, 200, mPaint);
}
}
相关文章推荐
- Android 颜色渲染(九) PorterDuff及Xfermode详解
- Android 颜色渲染(八) SweepGradient扫描/梯度渲染
- Android 中 Bitmap 和 Drawable 相互转换的方法
- Android 颜色渲染(七) RadialGradient 环形渲染实现水波纹效果
- Android 热补丁动态修复框架小结
- Android 颜色渲染(六) RadialGradient 环形渲染
- Android 颜色渲染(五) LinearGradient线性渲染
- Vitamio一款Android&iOS上的全能多媒体开发框架
- Android 颜色渲染(三) Shader颜色渲染
- Android Studio掌握
- Android中ViewFlipper的使用(转)
- Android 颜色渲染(二) 颜色区域划分原理与实现思路
- Android 颜色渲染(一) 颜色选择器 ColorPickerDialog剖析
- Android Service、Activity、BroadcastReceiver简单使用
- Android Studio你不知道的调试技巧
- android Graphics( 五):drawText()详解
- JAVA4ANDROID笔记
- android Graphics(四):canvas变换与操作
- 下载安装genymotion模拟器
- android Graphics(三):区域(Range)