正文

扩展定制的Camera应用程序(1)

Android多媒体开发高级编程 作者:(美)艾佛瑞


Android上内置的Camera应用程序缺少几个基本功能,其中之一是在少量时间(例如10秒或30秒)之后照相的能力。此功能通常对于安装了三角架的摄像头非常有用。它能完成的一件事就是摄影师能够建立一个场景,设置计时器,然后跑进该场景。

虽然不会经常这样使用移动电话,但是它在某些情况下将会非常有用。例如,当希望给自己和在一起的某个人照相时,我们会喜欢这个功能。目前,当尝试这么做时会遇到困难,此时我们看不到触摸屏界面,因为它与我们的脸部有一段距离。我们会在屏幕上到处乱点,希望能够按到拍照按钮。

2.2.1  构建基于定时器的Camera应用程序

为了纠正刚才所描述的情况,可以在照相时添加一个时间延迟。接下来更新SnapShot示例,使得在按下按钮10秒钟后开始照相。

为了实现这个功能,需要使用一个类似java.util.Timer的对象。但是,在Android中使用Timer对象会导致一些问题,因为它引入了一个单独的线程。为了使得单独的线程与UI交互,需要使用一个Handler对象在主线程中触发一个动作。

使用Handler对象的另一个用途是安排在将来发生的操作。Handler对象所拥有的功能使得我们不必使用Timer对象。

为了创建在将来执行某些动作的Handler对象,只须构建一个通用的Handler对象:

Handler timerHandler = new Handler();

然后,必须创建一个Runnable对象,在其run方法中包含后面将要发生的动作。在当前情况下,我们希望这个动作在10秒钟之后发生,触发照相操作:

Runnable timerTask = new Runnable() {

     public void run() {

          camera.takePicture(null,null,null,TimerSnapShot.this);

     } 

};

现在当单击一个按钮时,只需要这样安排操作:

timerHandler.postDelayed(timerTask, 10000);

这将通知timerHandler在10秒钟(10000毫秒)之后调用timerTask方法。

下面的示例将创建一个Handler对象,并使它每秒钟调用一个方法。通过采用这种方式,可以在屏幕上为用户提供倒计时。

 


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号