Android實(shí)現(xiàn)手機(jī)拍照功能
本文實(shí)例為大家講解如何輕松實(shí)現(xiàn)Android手機(jī)拍照功能,分享給大家供大家參考。具體如下:
一、布局文件main.xml
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/surfaceView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <RelativeLayout android:id="@+id/buttonlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:visibility="gone" > <Button android:id="@+id/takepicture" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:onClick="takepicture" android:text="@string/takepicture" /> <Button android:id="@+id/autofocus" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/takepicture" android:layout_marginRight="20dp" android:layout_toLeftOf="@id/takepicture" android:onClick="takepicture" android:text="@string/autofocus" /> </RelativeLayout> </FrameLayout>
二、MainActivity.java
import java.io.File; import java.io.FileOutputStream; import android.app.Activity; import android.hardware.Camera; import android.hardware.Camera.PictureCallback; import android.os.Bundle; import android.os.Environment; import android.view.MotionEvent; import android.view.SurfaceHolder; import android.view.SurfaceHolder.Callback; import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; public class MainActivity extends Activity { private View layout; private Camera camera; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.main); layout = this.findViewById(R.id.buttonlayout); SurfaceView surfaceView = (SurfaceView) this .findViewById(R.id.surfaceView); surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize(176, 144); surfaceView.getHolder().setKeepScreenOn(true); surfaceView.getHolder().addCallback(new SurfaceCallback()); } public void takepicture(View v) { if (camera != null) { switch (v.getId()) { case R.id.takepicture: camera.takePicture(null, null, new MyPictureCallback()); break; case R.id.autofocus: camera.autoFocus(null); break; } } } private final class MyPictureCallback implements PictureCallback { public void onPictureTaken(byte[] data, Camera camera) { try { File jpgFile = new File( Environment.getExternalStorageDirectory(), System.currentTimeMillis() + ".jpg"); FileOutputStream outStream = new FileOutputStream(jpgFile); outStream.write(data); outStream.close(); camera.startPreview(); } catch (Exception e) { e.printStackTrace(); } } } private final class SurfaceCallback implements Callback { public void surfaceCreated(SurfaceHolder holder) { try { camera = Camera.open();// 打開攝像頭 Camera.Parameters parameters = camera.getParameters(); // Log.i("MainActivity", parameters.flatten()); parameters.setPreviewSize(800, 480); parameters.setPreviewFrameRate(5); parameters.setPictureSize(1024, 768); parameters.setJpegQuality(80); camera.setParameters(parameters); camera.setPreviewDisplay(holder); camera.startPreview();// 開始預(yù)覽 } catch (Exception e) { e.printStackTrace(); } } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } public void surfaceDestroyed(SurfaceHolder holder) { if (camera != null) { camera.release(); camera = null; } } } @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { layout.setVisibility(ViewGroup.VISIBLE); return true; } return super.onTouchEvent(event); } }
三、添加權(quán)限
<uses-permission android:name="android.permission.CAMERA" /> <!-- 在SDCard中創(chuàng)建與刪除文件權(quán)限 --> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <!-- 往SDCard寫入數(shù)據(jù)權(quán)限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
效果如下:
希望本文所述對大家學(xué)習(xí)Android軟件編程有所幫助。
- Android編程調(diào)用系統(tǒng)自帶的拍照功能并返回JPG文件示例【附demo源碼下載】
- android實(shí)現(xiàn)手機(jī)App實(shí)現(xiàn)拍照功能示例
- Android自定義相機(jī)實(shí)現(xiàn)定時(shí)拍照功能
- Android使用系統(tǒng)自帶的相機(jī)實(shí)現(xiàn)一鍵拍照功能
- Android仿微信選擇圖片和拍照功能
- Android調(diào)用手機(jī)拍照功能的方法
- Android啟動(dòng)相機(jī)拍照并返回圖片
- Android仿微信發(fā)表說說實(shí)現(xiàn)拍照、多圖上傳功能
- Android實(shí)現(xiàn)從本地圖庫/相機(jī)拍照后裁剪圖片并設(shè)置頭像
- Android手機(jī)拍照或選取圖庫圖片作為頭像
- Android編程實(shí)現(xiàn)拍照功能的2種方法分析
相關(guān)文章
android同時(shí)控制EditText輸入字符個(gè)數(shù)和禁止特殊字符輸入的方法
這篇文章主要介紹了android同時(shí)控制EditText輸入字符個(gè)數(shù)和禁止特殊字符輸入的方法,涉及Android操作EditText控制字符操作的技巧,需要的朋友可以參考下2015-04-04Android 實(shí)現(xiàn)自定義圓形進(jìn)度條的功能
這篇文章主要介紹了Android 實(shí)現(xiàn)自定義圓形進(jìn)度條的功能的相關(guān)資料,開發(fā)Android應(yīng)用的朋友肯定對自定義View不陌生,很多都有重新寫的,這里就對實(shí)現(xiàn)圓形進(jìn)度條介紹下,需要的朋友可以參考下2016-11-11Android實(shí)現(xiàn)支付寶支付密碼輸入界面
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)支付寶支付密碼輸入界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05Android實(shí)現(xiàn)點(diǎn)擊兩次BACK鍵退出應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)點(diǎn)擊兩次BACK鍵退出應(yīng)用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Android平臺(tái)下輕量級(jí)http網(wǎng)絡(luò)傳輸庫
這篇文章主要介紹了Android平臺(tái)下輕量級(jí)http網(wǎng)絡(luò)傳輸庫的相關(guān)資料,需要的朋友可以參考下2016-01-01解析:android 如何從JPEG生成BufferedImage
本篇文章是對在android中,如何從JPEG生成BufferedImage的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06