倒计时拍照功能简单例子

private SurfaceView imageSView;
// private TextView countDownTextView;
private TextView countDownTextView;
private Camera camera;
private SurfaceHolder surfaceHolder;
private Handler timerUpdateHandler;
private boolean timerRunning = false;
private int currentTimer = 10;
imageSView.setZOrderMediaOverlay(true);
surfaceHolder = imageSView.getHolder();

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

surfaceHolder.addCallback(this);

 

 

 

@Override
public void onPictureTaken(byte[] data, Camera camera) {
    // TODO Auto-generated method stub
    String stuname= getIntent().getStringExtra("stuname");
    String stuid= getIntent().getStringExtra("stuid");
    String fileName=stuid+"-"+stuname;
    File outputImage;
    if (!new File(Environment.getExternalStorageDirectory()+"/idrmsapp/images_upload").exists()){
        new File(Environment.getExternalStorageDirectory()+"/idrmsapp/images_upload").mkdir();
    }
    if (new File(ConstantConfig.IMAGES_UPLOAD+fileName+"-"+(photoNameCount+1)+".png").exists()) {
        while (new File(ConstantConfig.IMAGES_UPLOAD + fileName + "-" + (photoNameCount + 1) + ".png").exists()) {
            photoNameCount++;
        }
        outputImage = new File(ConstantConfig.IMAGES_UPLOAD + fileName + "-" + (photoNameCount + 1) + ".png");
        try {
            outputImage.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }
        imageUri = Uri.fromFile(outputImage);
        image=outputImage.toString();
    }else {
        outputImage=new File(ConstantConfig.IMAGES_UPLOAD+fileName+"-"+(photoNameCount+1)+".png");
        try {
            outputImage.createNewFile();
        }catch (IOException e){
            e.printStackTrace();
        }
        imageUri= Uri.fromFile(outputImage);
        image=outputImage.toString();
    }
    Uri imageFileUri = imageUri;
    try {
        OutputStream imageFileOS = getContentResolver().openOutputStream(
                imageFileUri);
        imageFileOS.write(data);
        imageFileOS.flush();
        imageFileOS.close();
        
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
    }
    camera.startPreview();
    showPicture();

}

 

 

private Runnable timerUpdateTask = new Runnable() {

    @Override
    public void run() {
        if (currentTimer==4){
            initSufaceHolder();
            isForTakingPhoto=true;
            showImage(false);
            showCountUi(true);
        }

        // TODO Auto-generated method stub
        if (currentTimer > 1&&photoCount<3) {
            currentTimer--;
            timerUpdateHandler.postDelayed(timerUpdateTask, 1000);
        } else {
            if (photoCount<3){
                mCamera.stop();
                faceDetectDismiss(true);
                camera.takePicture(null, null, null, TakePhotoActivity.this);
                timerRunning = false;
                currentTimer = 4;

            }else {
                Intent intent=new Intent();
                intent.setClass(TakePhotoActivity.this,MainActivity.class);
                startActivity(intent);
                finish();
            }

        }
        countDownTextView.setText(currentTimer + "");
    }
};

 

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
                           int height) {
    // TODO Auto-generated method stub
    if (isForTakingPhoto) {
        camera.startPreview();
    }
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    if (isForTakingPhoto) {
        int cameraNums = Camera.getNumberOfCameras();
        Log.e(CAMERA_CONTROLL, cameraNums + "");
        try {
            camera = Camera.open(cameraNums - 1);
        } catch (Exception e) {
            Log.e(CAMERA_CONTROLL, e.getMessage());
        }
        try {
            camera.setPreviewDisplay(holder);
            Camera.Parameters parameters = camera.getParameters();
            if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
                parameters.set("orientation", "portrait");
                camera.setDisplayOrientation(180);
                parameters.setRotation(180);
            }
            List<String> colorEffects = parameters.getSupportedColorEffects();
            Iterator<String> cei = colorEffects.iterator();
            while (cei.hasNext()) {
                String currentEffect = cei.next();
                if (currentEffect.equals(Camera.Parameters.EFFECT_SOLARIZE)) {
                    parameters
                            .setColorEffect(Camera.Parameters.EFFECT_SOLARIZE);
                    break;
                }
            }
            camera.setParameters(parameters);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            // e.printStackTrace();
            camera.release();
        }
    }
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub
    if (isForTakingPhoto){
        camera.stopPreview();
        camera.release();
    }
}

 

timerUpdateHandler = new Handler();
if (!timerRunning) {
    timerRunning = true;
    timerUpdateHandler.post(timerUpdateTask);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值