很多應用程式,開啟後展示歡迎介面 約0.5秒,然後跳轉到主介面,均是利用延遲實現的。http://blog.csdn.net/yanzi1225627/article/details/7934710這裡介紹了在網路攝影機預覽的同時,背景畫一個矩形框或者座標系,原來的方法是點擊預覽按鈕時畫的。現在想一開啟應用程式就自動預覽,同時畫出十字標示。即原先由按鈕監聽來實現預覽,改為在surfaceCreated函數裡就進行預覽。在MainActivity裡定義一個SurfaceCallback類。如下所示:
private final class SurfaceCallback implements Callback{ public void surfaceCreated(SurfaceHolder holder) { try{ camera = Camera.open(); Camera.Parameters parameters = camera.getParameters(); parameters.setPreviewSize(960, 540);
parameters.setPreviewFrameRate(5); parameters.setPictureSize(1280, 960); parameters.setJpegQuality(80); camera.setParameters(parameters); camera.setPreviewDisplay(holder); camera.startPreview();// }catch (Exception e) { e.printStackTrace(); } new Handler().postDelayed(new Runnable(){ public void run() { // TODO Auto-generated method stub /*畫十字*/ mDraw.setVisibility(View.VISIBLE); mDraw.drawLine(); } }, 2000); } public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) { } public void surfaceDestroyed(SurfaceHolder holder) { if(camera!=null){ camera.release(); camera = null; } } }
畫十字的函數很簡單只有兩句
mDraw.setVisibility(View.VISIBLE);
mDraw.drawLine();
但這兩句話放在 public void surfaceCreated(SurfaceHolder holder){ 。。。}這個函數裡的camera.startPreview()之後發現不中,原因是在底層surfaceview預覽畫面未正常前貌似頂層的不能繪製,難道一個線程裡 不能同時繪製??? 只能說原因不明,就只能用延遲了。
new Handler().postDelayed(new Runnable(){
public void run() {
// TODO Auto-generated method stub
/*畫十字*/
mDraw.setVisibility(View.VISIBLE);
mDraw.drawLine();
}
}, 2000);
裡面的run()函數是延遲時間到了之後,要乾的事情。
如果是實現一個開機歡迎介面,run()函數裡面一般可以這樣寫:
Intent intent = new Intent(BeginActivity.this, MainActivity.class);
BeginActivity.this.startActivity(intent);
BeginActivity.finish();
感謝Joim、高高兄弟的指點。Joim的代碼寫的就是牛逼啊! http://blog.csdn.net/qinde025/article/details/6828723這裡對android任務延遲做了歸納,不錯。 android學習 歡迎加入群:248217350
後注:這個代碼加到onCreate函數更好!加到開始預覽的後面,等於延長了 等待時間!