在做Camera的时候遇到一个问题如下:
拍照功能是Camera.java里的方法实现的。笑脸检测是在Camera.java中放了个回调函数。FaceView中的检测
现在有没有笑脸的结果是FaceView.java中得到的。但是拍照方法在Camera.java中。
需要实现的就是检测到笑脸以后自动拍照。
最终用监听的方式实现的。代码如下:
先定义一个接口:
package com.java.listenerdemo;
public interface SmileFaceListener {
void withSmileFace();
}
FaceView中调用接口方法:
package com.java.listenerdemo;
public class FaceView {
private SmileFaceListener mSmileFaceListener;
private boolean checkedSmileFace ;
public FaceView(){
}
public void setCheckedSmileFace(boolean checkedSmileFace){
this.checkedSmileFace = checkedSmileFace;
}
public void setSmileFaceListener(SmileFaceListener smileFaceListener){
this.mSmileFaceListener = smileFaceListener;
}
/**
* 在非 Camera.java 的其他类中被调用检测是否有笑脸
*/
public void checkSmileFace(){
//check.....
//checkedSmileFace = true or false
if(checkedSmileFace && mSmileFaceListener != null){
mSmileFaceListener.withSmileFace();
}
}
}
在Camera.java中绑定监听器
package com.java.listenerdemo;
import android.app.Activity;
import android.os.Bundle;
public class Camera extends Activity implements SmileFaceListener{
private FaceView mFaceView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mFaceView = new FaceView();
mFaceView.setSmileFaceListener(this);
}
/**
* 执行拍照
*/
private void shooting(){
//caputer now
}
@Override
public void withSmileFace() {
// TODO Auto-generated method stub
shooting();
}
}
第一次写成监听这样的形式。还挺喜悦。