前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android实现定时拍照功能

android实现定时拍照功能

作者头像
砸漏
发布2020-11-05 10:30:08
1.2K0
发布2020-11-05 10:30:08
举报
文章被收录于专栏:恩蓝脚本

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

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

代码语言:javascript
复制
<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  

在清单文件中加入权限:

代码语言:javascript
复制
<uses-permission android:name="android.permission.CAMERA" /  
<!--下面的可不需要--  
<uses-feature android:name="android.hardware.camera" /  
<uses-feature android:name="android.hardware.camera.autofocus" /  

主程序:

代码语言:javascript
复制
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(); 
} 
} 

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档