1. config.xml
配置 各种 timeout 时间
<integer name="multitoggleitems_timeout">3000</integer>
<integer name="controll_timeout">3000</integer>
2. XXXModule
public class XXXModule
implements CameraModule, PhotoController,CaptureController,xxx{
private static final int LAYOUT_HIDE = 100 ;
private static final int DISAPPEAR_TIME = 3000 ;
public void onResumeAfterSuper() {
mActivity.onModuleSelected(ModuleSwitcher.CAPTURE_MODULE_INDEX);
}
Handler {
switch (msg.what) {
hideviews();
}
}
public void hideLayout(){
mHandler.removeMessages(HIDE_LAYOUT);
mHandler.sendEmptyMessage(HIDE_LAYOUT);
}
public void hideLayout(boolean isTouch){
if (isTouch) {
mHandler.removeMessages(HIDE_LAYOUT);
} else {
mHandler.sendEmptyMessageDelayed(HIDE_LAYOUT, DISAPPEAR_TIME);
}
}
public CaptureUI getUI(){
return mUI;
}
}
3. CameraActivity
CameraActivity {
private long time= 1000 * 60 * 2;
private ModuleSwitcherManager mModuleSwitcherManager;
oncreate(){
//module controll
mModuleSwitcherManager = new ModuleSwitcherManager();
mModuleSwitcherManager.create(this ,mCameraRootFrame);
mModuleSwitcherManager.setOnModuleChangeListener(this);
mCurrentModule = mModuleSwitcherManager.getCurrentCameraModule();
}
@Override
public void onModuleSelected(int moduleIndex) {
checkIfNeedRestartCountDown(null);
}
//auto finish
private Runnable finishActivityRunnable = new Runnable() {
@Override
public void run() {
finish();
}
};
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
.....
checkIfNeedRestartCountDown(ev);
return result;
}
public void checkIfNeedRestartCountDown(MotionEvent ev){
boolean isRecording = false;
mMainHandler.removeCallbacks(mFinishActivityRunnable);
if (ev == null || ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
if (mModuleSwitcherManager.getCurrentCameraModule() instanceof PhotoModule) {
((PhotoModule) mModuleSwitcherManager.getCurrentCameraModule()).hideLayout(true);
}
if (mModuleSwitcherManager.getCurrentCameraModule() instanceof CaptureModule) {
((CaptureModule) mModuleSwitcherManager.getCurrentCameraModule()).hideLayout(true);
}
}
if (ev == null || ev.getAction() == MotionEvent.ACTION_UP) {
if (mModuleSwitcherManager.getCurrentCameraModule() instanceof PhotoModule) {
((PhotoModule) mModuleSwitcherManager.getCurrentCameraModule()).hideLayout(false);
((PhotoModule) mModuleSwitcherManager.getCurrentCameraModule()).getPhotoUI().setTouchEvent(true);
}
if (mModuleSwitcherManager.isVideoModule(mModuleSwitcherManager.getCurrentModuleIndex())) {
isRecording = true;
}
if(!isRecording)
mMainHandler.postDelayed(finishActivityRunnable, time);
if (mModuleSwitcherManager.getCurrentCameraModule() instanceof CaptureModule) {
((CaptureModule) mModuleSwitcherManager.getCurrentCameraModule()).hideLayout(false);
((CaptureModule) mModuleSwitcherManager.getCurrentCameraModule()).getUI().setTouchEvent(true);
}
}
}