public class ShaderActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyView myView = new MyView(this);
setContentView(myView);
}
public class MyView extends View{
//声明BitMap对象
private Bitmap bitmap;
//声明位图渲染图像
private Shader bitmapShader;
//声明线性渲染对象
private Shader linerGradient;
//声明光束渲染对象
private Shader radialGradient;
//声明梯度渲染对象
private Shader sweepGradient;
//声明混合渲染对象
private Shader composeGradient;
private Paint paint;
//声明颜色数组
private int[] colors;
private boolean isFrist = true;
/**
* @param context
*/
public MyView(Context context) {
super(context);
//获得BitMap实例
bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.openning);
//实例化画笔
paint = new Paint();
colors = new int[]{Color.RED,Color.GREEN,Color.BLUE};
//实例化位图渲染对象,X坐标方向重复图形, Y坐标方向镜像图形
bitmapShader = new BitmapShader(bitmap,TileMode.REPEAT,TileMode.MIRROR);
//实例化线性对象
linerGradient = 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);
//实例化混合
composeGradient = new ComposeShader(linerGradient,radialGradient,PorterDuff.Mode.DARKEN);
setFocusable(true);
}
/* (non-Javadoc)
* @see android.view.View#onDraw(android.graphics.Canvas)
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(isFrist){
String content = "按上、下、左、右、中间键测试";
paint.setColor(Color.BLUE);
canvas.drawText(content, 0, content.length()-1, 20,20,paint);
}else{
//全屏画矩形
canvas.drawRect(0, 0, getWidth(), getHeight(), paint);
}
}
/* (non-Javadoc)
* @see android.view.View#onKeyDown(int, android.view.KeyEvent)
*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
isFrist = false;
if(keyCode == KeyEvent.KEYCODE_DPAD_UP){
paint.setShader(bitmapShader);
}
if(keyCode == KeyEvent.KEYCODE_DPAD_DOWN){
paint.setShader(linerGradient);
}
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(composeGradient);
}
//重绘界面
postInvalidate();
return super.onKeyDown(keyCode, event);
}
}
}
分享到:
相关推荐
在Android平台上,Shader类是图形...不过,使用Shader需要一定的学习曲线,包括理解GLSL语法、图形渲染原理和性能优化策略。在实际开发中,结合Android提供的工具和库,可以更高效地利用Shader实现各种酷炫的图形效果。
Shader是Paint的一个重要组成部分,用于实现复杂的图形渲染效果,如线性渐变(LinearGradient)、径向渐变(RadialGradient)、位图着色(BitmapShader)和扫描渐变(SweepGradient)。 首先,我们来详细了解一下Paint类。...
在本示例中,我们将探讨如何使用Shader实现卡通渲染。卡通渲染是一种非真实感渲染技术,它模拟了传统手绘动画的风格,通过简化光影、边缘强化和色彩对比来创造独特的视觉效果。 首先,我们需要了解HLSL(High-Level...
ShaderForge是一款强大的图形界面工具,专为Unity游戏引擎设计,用于创建自定义着色器。它允许开发者通过直观的节点式界面,而非直接编写复杂的着色器代码,来构建和编辑着色效果。源码的提供意味着我们可以深入理解...
在Android开发中,Shader类是实现复杂图形渲染和图像效果的关键工具。Shader是OpenGL ES(OpenGL for Embedded Systems)的一部分,它允许开发者自定义顶点和片段处理,从而创建出丰富的2D和3D图形。本篇文章将对...
Shader是OpenGL中的一个重要概念,它允许我们直接在GPU上执行计算,极大地提高了图形渲染的效率。本篇文章将深入探讨如何使用shader在OpenGL中渲染一个基本的三角形。 首先,我们需要理解OpenGL的工作流程。当我们...
Shader渲染在Android应用开发中扮演着重要的角色,尤其是在自定义视图和图形处理方面。它允许开发者通过编程方式控制屏幕上的像素颜色,从而实现复杂的视觉效果。本篇将深入探讨BitmapShader、线性渐变以及梯度渐变...
Shader是在OpenGL中实现复杂图形效果的关键工具,它允许开发者编写自己的渲染代码,以控制图形的着色过程。这篇资源是关于如何在现代OpenGL中使用Shader的实践教程,基于VS2015开发环境。 首先,了解Shader的基本...
在Android平台上,使用Compute Shader可以显著提升计算密集型任务的执行效率,特别是在图形处理和物理模拟等场景。Compute Shader是OpenGL ES 3.0引入的一个重要特性,它允许开发者利用GPU进行并行计算,不再局限于...
计算机图形学渲染书籍: 1):Andrew Glassner 的An Introduction to Ray tracing (光线追踪) 2):Francois X. Sillion的Radiosity and Global Illumination(辐射度) 3):Ian Ashdown的Radiosity: A Programmer's ...
Shader(着色器)是一种用于图形渲染的程序,它在图形处理单元(GPU)上执行,负责处理图形数据,如顶点、像素等,以实现复杂的视觉效果。以下是对Shader的详细介绍: 一、Shader的基本概念和分类 基本概念:Shader...
通过这些实例,学习者可以深入了解OpenGL的顶点着色器、片段着色器、几何着色器等功能,以及如何使用Shader进行图形的高级渲染。同时,还可以掌握递归算法的应用、分形理论、纹理映射等计算机图形学的关键概念。对于...
本文将深入探讨Android中的图形图像渲染技术,包括基础概念、渲染流程、Shader(着色器)的应用以及如何利用工具进行优化。 首先,我们需要理解Android图形渲染的基本原理。Android使用SurfaceFlinger服务来管理...
在"Deferred Shader延迟渲染的例子"中,我们看到的是基于DirectX 3D和HLSL(High-Level Shader Language)的一个实例。DirectX 3D是微软开发的一套API,用于处理3D图形和音频,而HLSL则是一种专门用于DirectX的着色...
在本资源中,"TypeScript图形渲染实战:基于WebGL的3D架构与实现",我们探讨了如何利用TypeScript这一强大的静态类型语言,结合WebGL技术,来构建高效的3D图形渲染应用。WebGL是一种JavaScript API,允许在浏览器中...
总之,Shader的使用涉及OpenGL ES API、GLSL编程以及Android的图形渲染流程。熟练掌握Shader可以让你在Android平台上创建出更丰富、更动态的视觉效果。在 Lesson11-Graphics009-Shader 中,你将会看到具体示例,从...
开发者可以使用Unity Shader创建复杂的图形效果,提高游戏或应用程序的视觉效果。 9. 小结 本资源提供了一个完整的Unity Shader实现图形绘制的示例代码,涵盖了Shader的结构、Properties的定义、SubShader的定义、...
2. **Surface Shaders**:Unity内置渲染管线和URP都支持Surface Shaders,但URP中的Surface Shader需要使用`SubShader`标签内的`UniversalSurfaceInput`结构体。转换工具会将旧的`Input`结构体替换为`...
在Unity中,这通常涉及到两个主要方面:物理模拟和Shader渲染。 1. **物理模拟**: - 风力效果通常通过刚体(Rigidbody)组件和Force应用来实现。我们可以为树叶创建一个小型的刚体,并在风力源(如一个风力场或...