您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關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如何實現定時拍照功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。