很多应用程序,打开后展示欢迎界面 约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
|