RSSurfaceView in android

Source: Internet
Author: User

RSSurfaceView in android

RSSurfaceView directly inherits from SurfaceView and implements the SurfaceHolder. Callback interface. Resolution:

1. constructor 1

 public RSSurfaceView(Context context) {        super(context);        init();        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");    }

2. constructor 2

    public RSSurfaceView(Context context, AttributeSet attrs) {        super(context, attrs);        init();        //Log.v(RenderScript.LOG_TAG, "RSSurfaceView");    }


3. Initialization: Add a callback to receive notifications when the surface is created or destroyed.

    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. Callback during creation

 public void surfaceCreated(SurfaceHolder holder) {        mSurfaceHolder = holder;    }


5. Destroyed callback

    public void surfaceDestroyed(SurfaceHolder holder) {        synchronized (this) {            // Surface will be destroyed when we return            if (mRS != null) {                mRS.setSurface(null, 0, 0);            }        }    }

6. Callback during change

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {        synchronized (this) {            if (mRS != null) {                mRS.setSurface(holder, w, h);            }        }    }


7. Pause: notifies the current View that the current activity has been paused. When the activity is paused, you must call the modify method. Calling this method will pause the rendering thread and be called only after the Renderer is set.

  public void pause() {        if(mRS != null) {            mRS.pause();        }    }

8. Resume: the current View activity has been restored. When the activity recovers, you must call this method to re-create the OpenGL display and restore the rendering thread. This method can be called only after the Renderer is set.

  public void resume() {        if(mRS != null) {            mRS.resume();        }    }


9. Create RenderScriptGL

 public RenderScriptGL createRenderScriptGL(RenderScriptGL.SurfaceConfig sc) {      RenderScriptGL rs = new RenderScriptGL(this.getContext(), sc);        setRenderScriptGL(rs);        return rs;    }


10. Destroy the current RenderScriptGL

  public void destroyRenderScriptGL() {        synchronized (this) {            mRS.destroy();            mRS = null;        }    }

11. Set RenderScriptGL

 public void setRenderScriptGL(RenderScriptGL rs) {        mRS = rs;    }

12. Obtain the current RenderScriptGL

    public RenderScriptGL getRenderScriptGL() {        return mRS;    }


Attached source code:

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. * *  * Developer Guides * 

For more information about creating an application that uses Renderscript, read the * Renderscript developer guide.

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





Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.