android實現(xiàn)定時拍照功能
更新時間:2018年05月29日 13:54:03 作者:yhcelebrite
這篇文章主要為大家詳細介紹了android實現(xiàn)定時拍照功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
在手機上面實現(xiàn),設(shè)置一段時間(以秒計時)之后,自動拍照,適用于攝影師建立一個場景,之后設(shè)置時間,再進入場景。
界面主要就是一個設(shè)置時間的EditText和啟動倒計時的Button,設(shè)置完時間之后,點擊倒計時按鈕。
<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>
在清單文件中加入權(quán)限:
<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(); } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- android實現(xiàn)定時拍照并發(fā)送微博功能
- Android使用自定義view在指定時間內(nèi)勻速畫一條直線的實例代碼
- Android使用Handler實現(xiàn)定時器與倒計時器功能
- Android定時器和倒計時實現(xiàn)淘寶秒殺功能
- Android CountDownTimer實現(xiàn)定時器和倒計時效果
- android service實現(xiàn)循環(huán)定時提醒功能
- android用鬧鐘定時做http請求推送的解決方案
- Android鬧鐘機制實現(xiàn)定時任務(wù)功能
- Android編程實現(xiàn)popupwindow定時消失的方法
- Android中AlarmManager+Notification實現(xiàn)定時通知提醒功能
- 詳解Android實現(xiàn)定時器的幾種方法
- Android定時開機的流程詳解
相關(guān)文章
簡單實用的Android studio 調(diào)試技巧
這篇文章主要介紹了簡單實用的Android studio 調(diào)試技巧的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-07-07Android 跨進程模擬按鍵(KeyEvent )實例詳解
這篇文章主要介紹了Android 跨進程模擬按鍵(KeyEvent )實例詳解的相關(guān)資料,類似手機遙控器的需求就可以這么做,需要的朋友可以參考下2016-11-11Android 控件(button)對齊方法實現(xiàn)詳解
horizontal是讓所有的子元素按水平方向從左到右排列,vertical是讓所有的子元素按豎直方向從上到下排列,下面為大家介紹下控件(button)的對齊方法2013-06-06