`
yidongkaifa
  • 浏览: 4059824 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics