Android 颜色处理(十) ComposeShader组合渲染
public ComposeShader(Shader shaderA,Shader shaderB, Xfermode mode)
Parameters
shaderA
渲染器A,Shader及其子类对象 |
shaderB
渲染器B,Shader及其子类对象 |
mode
两种渲染器组合的模式,Xfermode对象 |
Parameters
shaderA
渲染器A,Shader及其子类对象 |
shaderB
渲染器B,Shader及其子类对象 |
mode
.两种渲染器组合的模式,ProterDuff.Mode对象 |
Xfermode及ProterBuff.Mode具体含义见上一篇:
Android 颜色渲染(八) PorterDuff及Xfermode详解
ComposeShader,和AnimationSet的用法相似.是可以将两种颜色渲染器的效果进行组合:
以上图像由BimtmapShader和LinearGradient两种效果组合绘制,其中位图渲染 平铺模式使用的为镜像模式, 组合渲染使用了ProterDuff叠加模式,具体见如下代码:
MainActivity:
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:
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 UI】Paint Gradient 渐变渲染 ① ( LinearGradient 线性渐变渲染 | 设置渲染方向 | 设置渲染颜色 | 设置渲染模式 | MIRROR ) https://blog.csdn.net/shulianghan/article/details/125047457 博客配套源码 ...
Android下使用OpenGL渲染yuv420p图像并显示。例子中提供了两种类型,一种使用GLSurfaceView在onDrawframe中调用native方法绘制,另外一种使用EGL,直接在native层完成渲染和显示功能。
MarkdownView - 支持Markdown渲染的WebView实现
支持YUV 的I420/NV21/NV12的数据渲染,关键字:opengl es 、surfaceview、android、camera
一个利用RxJava在TextView和EditText上渲染的markdown解析器,支持大部分语法以及部分语法在EditText上实时预览(yydcdut)
android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画。 1. 安装 gradle: dependencies { compile 'com.gplibs:magic-surface-view:1.1.1' } 2. 一些示例效果 此文档只做一些简单说明...
《android 渲染架构演进》
android 最新ffmpeg3.4.2版本, 实现硬解软解视频+nativewindow渲染例子
关于Android游戏开发的前台渲染的基础
根据数据结构动态渲染视图,render.view 为渲染视图结构。
ArcEngine简单教程——栅格、矢量图层的颜色渲染对应demo; 备份链接:链接:https://pan.baidu.com/s/1e9I07SEFI1kRzmZuiLxQ7w 提取码:kkw5 教程博客:https://blog.csdn.net/nominior/article/details/106279762
1.移植ffmpeg到android 2.通过JNI接口调用ffmpeg实现h264的解码以及渲染 3.h264渲染采用opengles技术 代码保护局ffmpeg源码 JNI部分 以及opengles渲染部分,还有上层demo APP程序,该程序可以直接安装,播放h264...
ComposeShader 组合渲染 paint.setShader(bitmapShader); 效果展示,设置画笔渲染,画笔在图层上渲染,图片未摆满控件,摆放模式 1.xml布局: 2. MyView 控件代码: * 图片平铺模式:
用android shader线性渲染实现类似与歌词逐字变色同步的效果
使用Html来渲染Android界面的动态化界面方案
【Opengl Android】在安卓上渲染一个obj模型 用了obj2openjl 这个库
android 图片渲染效果源码.zip
包含JTable基本操作和初始化方法 和高级的颜色渲染功能
第8章 服务器端渲染;;目录;目录;知识架构;知识架构;知识架构;知识架构;8.3 webpack搭建服务器端渲染;8.3 webpack搭建服务器端渲染;8.3 webpack搭建服务器端渲染;8.3 webpack搭建服务器端渲染;8.3 webpack搭建服务器...
Android平台 将 GL_TEXTURE_2D纹理 渲染到 Surface 上 案例实现文章介绍: https://xiaxl.blog.csdn.net/article/details/131682521 技术实现流程大致如下: 1、OpenGLES3中加载GL_TEXTURE_2D纹理,生成纹理ID; 2...