android中RSSurfaceView
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了android中RSSurfaceView,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5680字,纯文字阅读大概需要9分钟。
内容图文
RSSurfaceView直接继承自SurfaceView,实现了SurfaceHolder.Callback回调接口。解析如下:
1、 构造方法1
public RSSurfaceView(Context context) { super(context); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); }
2、构造方法2
public RSSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); }
3、初始化:增加回调,以便当surface被创建和摧毁时能收到通知。
private void init() { // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed SurfaceHolder holder = getHolder(); holder.addCallback(this); }
4、创建时的回调
public void surfaceCreated(SurfaceHolder holder) { mSurfaceHolder = holder; }
5、摧毁时的回调
public void surfaceDestroyed(SurfaceHolder holder) { synchronized (this) { // Surface will be destroyed when we return if (mRS != null) { mRS.setSurface(null, 0, 0); } } }
6、改变时的回调
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { synchronized (this) { if (mRS != null) { mRS.setSurface(holder, w, h); } } }
7、暂停:通知该View当前activity已经暂停了,当activity被暂停时必须调用改方法,调用此方法将暂停渲染线程,必须在渲染器设置之后才能调用。
public void pause() { if(mRS != null) { mRS.pause(); } }
8、恢复:通知此View当前activity已经恢复了,当activity恢复时必须调用此方法去重新创建OpenGL展示,和恢复渲染线程;必须在渲染器设置之后才能调用。
public void resume() { if(mRS != null) { mRS.resume(); } }
9、创建RenderScriptGL
public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) { RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc); setRenderScriptGL(rs); return rs; }
10、摧毁当前的RenderScriptGL
public void destroyRenderScriptGL() { synchronized (this) { mRS.destroy(); mRS = null; } }
11、设置RenderScriptGL
public void setRenderScriptGL(RenderScriptGL rs) { mRS = rs; }
12、获取当前RenderScriptGL
public RenderScriptGL getRenderScriptGL() { return mRS; }
附上源码:
package android.renderscript; import java.io.Writer; import java.util.ArrayList; import java.util.concurrent.Semaphore; import android.content.Context; import android.os.Handler; import android.os.Message; import android.util.AttributeSet; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; /** * @deprecated in API 16 * The Surface View for a graphics renderscript (RenderScriptGL) to draw on. * * <div class="special reference"> * <h3>Developer Guides</h3> * <p>For more information about creating an application that uses Renderscript, read the * <a href="{@docRoot}guide/topics/graphics/renderscript.html">Renderscript</a> developer guide.</p> * </div> */ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mSurfaceHolder; private RenderScriptGL mRS; /** * @deprecated in API 16 * Standard View constructor. In order to render something, you * must call {@link android.opengl.GLSurfaceView#setRenderer} to * register a renderer. */ public RSSurfaceView(Context context) { super(context); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); } /** * @deprecated in API 16 * Standard View constructor. In order to render something, you * must call {@link android.opengl.GLSurfaceView#setRenderer} to * register a renderer. */ public RSSurfaceView(Context context, AttributeSet attrs) { super(context, attrs); init(); //Log.v(RenderScript.LOG_TAG, "RSSurfaceView"); } private void init() { // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed SurfaceHolder holder = getHolder(); holder.addCallback(this); } /** * @deprecated in API 16 * This method is part of the SurfaceHolder.Callback interface, and is * not normally called or subclassed by clients of RSSurfaceView. */ public void surfaceCreated(SurfaceHolder holder) { mSurfaceHolder = holder; } /** * @deprecated in API 16 * This method is part of the SurfaceHolder.Callback interface, and is * not normally called or subclassed by clients of RSSurfaceView. */ public void surfaceDestroyed(SurfaceHolder holder) { synchronized (this) { // Surface will be destroyed when we return if (mRS != null) { mRS.setSurface(null, 0, 0); } } } /** * @deprecated in API 16 * This method is part of the SurfaceHolder.Callback interface, and is * not normally called or subclassed by clients of RSSurfaceView. */ public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { synchronized (this) { if (mRS != null) { mRS.setSurface(holder, w, h); } } } /** * @deprecated in API 16 * Inform the view that the activity is paused. The owner of this view must * call this method when the activity is paused. Calling this method will * pause the rendering thread. * Must not be called before a renderer has been set. */ public void pause() { if(mRS != null) { mRS.pause(); } } /** * @deprecated in API 16 * Inform the view that the activity is resumed. The owner of this view must * call this method when the activity is resumed. Calling this method will * recreate the OpenGL display and resume the rendering * thread. * Must not be called before a renderer has been set. */ public void resume() { if(mRS != null) { mRS.resume(); } } /** * @deprecated in API 16 **/ public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) { RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc); setRenderScriptGL(rs); return rs; } /** * @deprecated in API 16 **/ public void destroyRenderScriptGL() { synchronized (this) { mRS.destroy(); mRS = null; } } /** * @deprecated in API 16 **/ public void setRenderScriptGL(RenderScriptGL rs) { mRS = rs; } /** * @deprecated in API 16 **/ public RenderScriptGL getRenderScriptGL() { return mRS; } }
原文:http://blog.csdn.net/u010142437/article/details/40785993
内容总结
以上是互联网集市为您收集整理的android中RSSurfaceView全部内容,希望文章能够帮你解决android中RSSurfaceView所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。