android中RSSurfaceView

來源:互聯網
上載者:User

標籤:android   opengl   rssurfaceview   renderscriptgl   surfaceholder   

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;    }}





 

android中RSSurfaceView

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.