`

shader类渲染图形

 
阅读更多
public class MainActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(new MyView(this));
	}

	// 自定义视图类
	class MyView extends View {
		private Bitmap bitmap;
		private Shader bitmapShader; // 声明位图渲染对象
		private Shader linearGradient;// 声明线性渲染对象
		private Shader radialGradient;// 声明光束渲染对象
		private Shader sweepGradient;// 声明梯度渲染对象
		private Shader composeShader; // 声明混合渲染对象
		private Paint paint;
		private int[] colors;// 声明颜色数组
		private boolean isFirst = true;

		public MyView(Context context) {
			super(context);
			bitmap = BitmapFactory.decodeResource(getResources(),
					R.drawable.girl);
			paint = new Paint();
			colors = new int[] { Color.RED, Color.GREEN, Color.BLUE };
			bitmapShader = new BitmapShader(bitmap, TileMode.REPEAT,
					TileMode.MIRROR);// 实例化位图渲染对象,x坐标方向重复图形,y坐标方向镜像图形
			linearGradient = new LinearGradient(0, 0, 100, 100, colors, null,
					TileMode.REPEAT);// 实例化线性渲染
			radialGradient = new RadialGradient(100, 100, 80, colors, null,
					TileMode.REPEAT);// 实例化光束渲染
			sweepGradient = new SweepGradient(200, 200, colors, null);// 实例化梯度渲染
			composeShader = new ComposeShader(linearGradient, radialGradient,
					PorterDuff.Mode.DARKEN);// 实例化混合渲染
			setFocusable(true);// 使其获得焦点
		}

		@Override
		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);
			if (isFirst) {
				String s = "按上/下/左/右/中间键测试!";
				paint.setColor(Color.BLUE);
				canvas.drawText(s, 0, s.length() - 1, 20, 20, paint);
			} else {
				canvas.drawRect(0, 0, getWidth(), getHeight(), paint);// 全屏画矩形
			}
		}

		@Override
		public boolean onKeyDown(int keyCode, KeyEvent event) {
			isFirst = false;
			if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
				paint.setShader(bitmapShader);// 将画笔渲染设置为位图渲染
			}
			if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
				paint.setShader(linearGradient);// 将画笔渲染设置为线性渲染
			}
			if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
				paint.setShader(radialGradient);// 将画笔渲染设置为光束渲染
			}
			if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
				paint.setShader(sweepGradient);// 将画笔渲染设置为梯度渲染
			}
			if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
				paint.setShader(composeShader);// 将画笔渲染设置为混合渲染
			}
			postInvalidate();// 重绘界面
			return super.onKeyDown(keyCode, event);
		}
	}
}

 
   
 

 
  



 
 

 

  • 大小: 30.8 KB
  • 大小: 16.3 KB
  • 大小: 13.5 KB
  • 大小: 39.1 KB
  • 大小: 78.5 KB
分享到:
评论

相关推荐

    android Shader类简介_渲染图像示例

    在Android开发中,Shader类是实现复杂图形渲染和图像效果的关键工具。Shader是OpenGL ES(OpenGL for Embedded Systems)的一部分,它允许开发者自定义顶点和片段处理,从而创建出丰富的2D和3D图形。本篇文章将对...

    ShaderForge 图形界面编辑shader工具源码

    ShaderForge是一款强大的图形界面工具,专为Unity游戏引擎设计,用于创建自定义着色器。它允许开发者通过直观的节点式界面,而非直接编写复杂的着色器代码,来构建和编辑着色效果。源码的提供意味着我们可以深入理解...

    Deferred Shader延迟渲染的例子

    在"Deferred Shader延迟渲染的例子"中,我们看到的是基于DirectX 3D和HLSL(High-Level Shader Language)的一个实例。DirectX 3D是微软开发的一套API,用于处理3D图形和音频,而HLSL则是一种专门用于DirectX的着色...

    Shader渲染

    Shader渲染在Android应用开发中扮演着重要的角色,尤其是在自定义视图和图形处理方面。它允许开发者通过编程方式控制屏幕上的像素颜色,从而实现复杂的视觉效果。本篇将深入探讨BitmapShader、线性渐变以及梯度渐变...

    使用shader实现卡通渲染示例代码

    在计算机图形学领域,Shader是一种程序,用于控制GPU(图形处理器)如何处理图像数据,以实现各种复杂的视觉效果。在本示例中,我们将探讨如何使用Shader实现卡通渲染。卡通渲染是一种非真实感渲染技术,它模拟了...

    Shader(着色器)是一种用于图形渲染的程序.docx

    Shader(着色器)是一种用于图形渲染的程序,它在图形处理单元(GPU)上执行,负责处理图形数据,如顶点、像素等,以实现复杂的视觉效果。以下是对Shader的详细介绍: 一、Shader的基本概念和分类 基本概念:Shader...

    unity cgshader矩阵变换图形

    在Unity引擎中,CGShader是实现复杂图形效果和高级渲染技术的重要工具。它是一种着色语言,基于Cg(.Compiler Generator)编程模型,由NVIDIA公司开发,被Unity广泛采用来编写自定义着色器。矩阵变换是CGShader中的...

    shader渲染一个三角形

    Shader是OpenGL中的一个重要概念,它允许我们直接在GPU上执行计算,极大地提高了图形渲染的效率。本篇文章将深入探讨如何使用shader在OpenGL中渲染一个基本的三角形。 首先,我们需要理解OpenGL的工作流程。当我们...

    Paint的使用,Shader渲染器的使用

    Shader是Paint的一个重要组成部分,用于实现复杂的图形渲染效果,如线性渐变(LinearGradient)、径向渐变(RadialGradient)、位图着色(BitmapShader)和扫描渐变(SweepGradient)。 首先,我们来详细了解一下Paint类。...

    android shader线性渲染(类似与歌词逐字同步)

    在Android开发中,Shader是用于图形渲染的重要工具,它可以让我们自定义颜色、形状以及复杂的图像变换,从而实现各种酷炫的视觉效果。本教程将详细讲解如何利用Android Shader来实现一个类似于歌词逐字同步的线性...

    TypeScript图形渲染实战:基于WebGL的3D架构与实现_源代码+视频.zip

    1. 创建类型安全的接口和类,用于表示WebGL资源,如Buffer、Shader、Program等。 2. 编写类型安全的函数,用于设置WebGL状态,如启用或禁用特定的特性。 3. 提供面向对象的渲染框架,简化渲染流程,如统一的模型、...

    计算机图形学经典书籍资料-渲染部分

    计算机图形学渲染书籍: 1):Andrew Glassner 的An Introduction to Ray tracing (光线追踪) 2):Francois X. Sillion的Radiosity and Global Illumination(辐射度) 3):Ian Ashdown的Radiosity: A Programmer's ...

    OpenGL-Shader封装

    OpenGL是一种用于渲染2D、3D图像的跨语言、跨平台的应用程序编程接口(API),而Shader是OpenGL中处理图形渲染的关键组件。 在OpenGL中,Shader主要分为两种类型:顶点着色器(Vertex Shader)和片段着色器...

    计算机图形学opengl+shader几个实例

    Shader是在OpenGL中处理图形渲染的核心部分,它们是在GPU上运行的程序,用于计算颜色、光照、纹理等视觉效果。 本压缩包包含了一系列基于OpenGL和Shader的实例,旨在帮助学习者深入理解计算机图形学的基本概念和...

    图形渲染管线

    图形渲染管线

    Android 中的图形图像的渲染

    本文将深入探讨Android中的图形图像渲染技术,包括基础概念、渲染流程、Shader(着色器)的应用以及如何利用工具进行优化。 首先,我们需要理解Android图形渲染的基本原理。Android使用SurfaceFlinger服务来管理...

    Unity内置Shader,built-in-shaders

    在Unity中,内置Shader按照功能可以分为几个大类: 1. **标准Shader**:Standard Shader是最常用的,它支持PBR(物理渲染),包括金属度、粗糙度、法线贴图、环境光遮蔽等特性,能够模拟真实世界的光照效果。 2. *...

    Unity内置Shader翻译版

    Shader是控制图形渲染的核心程序,它定义了物体表面的颜色、光照、纹理等属性。Unity内置的Shader通常以Surface Shader的形式存在,这种类型的Shader简化了编程,使得开发者无需深入理解图形管道的细节就能创建复杂...

Global site tag (gtag.js) - Google Analytics