2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > android 实现自动拍照 android实现定时拍照功能

android 实现自动拍照 android实现定时拍照功能

时间:2021-12-12 12:56:06

相关推荐

android 实现自动拍照 android实现定时拍照功能

在手机上面实现,设置一段时间(以秒计时)之后,自动拍照,适用于摄影师建立一个场景,之后设置时间,再进入场景。

界面主要就是一个设置时间的EditText和启动倒计时的Button,设置完时间之后,点击倒计时按钮。

android:id="@+id/frameLayout"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

android:id="@+id/imageView"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

android:id="@+id/lineLayout"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/startBtn"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/startTimer"

android:layout_gravity="center_horizontal"/>

android:id="@+id/countDownEditTextView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_gravity="center_horizontal|center_vertical|center"

android:gravity="center_horizontal|center_vertical"

android:text="@string/conutTime"

android:textSize="80sp"

android:inputType="number"/>

在清单文件中加入权限:

主程序:

package cn.yh.cameradelaycontroll;

import java.io.OutputStream;

import java.util.Iterator;

import java.util.List;

import android.app.Activity;

import android.content.ContentValues;

import android.content.res.Configuration;

import android.hardware.Camera;

import android.hardware.Camera.PictureCallback;

import .Uri;

import android.os.Bundle;

import android.os.Handler;

import android.provider.MediaStore.Images.Media;

import android.text.Editable;

import android.text.TextWatcher;

import android.util.Log;

import android.view.Menu;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity implements SurfaceHolder.Callback,

OnClickListener, PictureCallback {

private static final String CAMERA_CONTROLL = "CAMERA_CONTROLL";

private SurfaceView imageSView;

private Button startButton;

// private TextView countDownTextView;

private EditText countDownEditTextView;

private Camera camera;

private SurfaceHolder surfaceHolder;

private Handler timerUpdateHandler;

private boolean timerRunning = false;

private int currentTimer = 10;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

imageSView = (SurfaceView) findViewById(R.id.imageView);

startButton = (Button) findViewById(R.id.startBtn);

// countDownTextView = (TextView) findViewById(R.id.countDowntextView);

countDownEditTextView = (EditText) findViewById(R.id.countDownEditTextView);

/*

countDownEditTextView.addTextChangedListener(new TextWatcher() {

@Override

public void onTextChanged(CharSequence s, int start, int before,

int count) {

// TODO Auto-generated method stub

}

@Override

public void beforeTextChanged(CharSequence arg0, int arg1,

int arg2, int arg3) {

// TODO Auto-generated method stub

}

@Override

public void afterTextChanged(Editable arg0) {

// TODO Auto-generated method stub

currentTimer = Integer.parseInt(countDownEditTextView.getText().toString());

}

});

*/

surfaceHolder = imageSView.getHolder();

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

surfaceHolder.addCallback(this);

startButton.setOnClickListener(this);

timerUpdateHandler = new Handler();

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public void onPictureTaken(byte[] data, Camera camera) {

// TODO Auto-generated method stub

Uri imageFileUri = getContentResolver().insert(

Media.EXTERNAL_CONTENT_URI, new ContentValues());

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();

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

currentTimer = Integer.parseInt(countDownEditTextView.getText().toString());

switch (v.getId()) {

case R.id.startBtn:

if (!timerRunning) {

timerRunning = true;

timerUpdateHandler.post(timerUpdateTask);

}

break;

}

}

private Runnable timerUpdateTask = new Runnable() {

@Override

public void run() {

// TODO Auto-generated method stub

if (currentTimer > 1) {

currentTimer--;

timerUpdateHandler.postDelayed(timerUpdateTask, 1000);

} else {

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

timerRunning = false;

currentTimer = 10;

}

countDownEditTextView.setText(currentTimer + "");

}

};

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub

camera.startPreview();

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub

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(90);

parameters.setRotation(90);

}

List colorEffects = parameters.getSupportedColorEffects();

Iterator 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

camera.stopPreview();

camera.release();

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。