Android开发:巧用延迟实现欢迎界面 及 摄像头预览后绘制背景标示(如坐标系、矩形框)

来源:互联网 发布:网络偶像 ftp 编辑:程序博客网 时间:2024/05/16 14:24

很多应用程序,打开后展示欢迎界面 约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函数更好!加到开始预览的后面,等于延长了 等待时间!


原创粉丝点击