首页 > 代码库 > android中RSSurfaceView

android中RSSurfaceView

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=http://www.mamicode.com/"{@docRoot}guide/topics/graphics/renderscript.html">Renderscript developer guide.

>





 

android中RSSurfaceView