android实现定时拍照功能
更新时间:2018年05月29日 13:54:03 作者:yhcelebrite
这篇文章主要为大家详细介绍了android实现定时拍照功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在手机上面实现,设置一段时间(以秒计时)之后,自动拍照,适用于摄影师建立一个场景,之后设置时间,再进入场景。
界面主要就是一个设置时间的EditText和启动倒计时的Button,设置完时间之后,点击倒计时按钮。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/frameLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/imageView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:id="@+id/lineLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/startBtn" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/startTimer" android:layout_gravity="center_horizontal"/> <!-- <TextView --> <!-- android:id="@+id/countDowntextView" --> <!-- 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="40sp" /> --> <EditText 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"/> </LinearLayout> </FrameLayout>
在清单文件中加入权限:
<uses-permission android:name="android.permission.CAMERA" /> <!--下面的可不需要--> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />
主程序:
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 android.net.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<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 camera.stopPreview(); camera.release(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- android实现定时拍照并发送微博功能
- Android使用自定义view在指定时间内匀速画一条直线的实例代码
- Android使用Handler实现定时器与倒计时器功能
- Android定时器和倒计时实现淘宝秒杀功能
- Android CountDownTimer实现定时器和倒计时效果
- android service实现循环定时提醒功能
- android用闹钟定时做http请求推送的解决方案
- Android闹钟机制实现定时任务功能
- Android编程实现popupwindow定时消失的方法
- Android中AlarmManager+Notification实现定时通知提醒功能
- 详解Android实现定时器的几种方法
- Android定时开机的流程详解
相关文章
Android 跨进程模拟按键(KeyEvent )实例详解
这篇文章主要介绍了Android 跨进程模拟按键(KeyEvent )实例详解的相关资料,类似手机遥控器的需求就可以这么做,需要的朋友可以参考下2016-11-11
最新评论