Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android中RSSurfaceView

android中RSSurfaceView

編輯:關於Android編程

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

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





  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved