編輯:關於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; } }
Android提供的系統服務之--SmsManager(短信管理器)
同樣,為了防止用戶惡意的頻繁發送激活碼,應用中需要對用戶發送激活碼的時間間隔進行限制,這時就需要用到倒計時器了,大概流程是這樣的:頁面初始化的時候,按鈕為可點擊狀態,用戶
1. 備忘錄設計模式介紹在不破壞封閉的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態,這樣,以後就可將該對象恢復到原先保存的狀態。2. 備忘錄設計模式使用場景
前面我們講解了系統截屏按鍵處理流程,HOME按鍵處理流程,今天再來講解一下電源開關機按鍵事件流程,當然這也是系統按鍵處理流程方面的最後一篇博客了。和截屏按鍵、HOME按鍵