android照相简单案例
16lz
2021-12-04
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.mytest.testcamera.MainActivity" > <SurfaceView android:id="@+id/sf_camera" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/btn_camera" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="照相" /></LinearLayout>View Code
AndroidMainfest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mytest.testcamera" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".PictureActivity" > </activity> </application> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /></manifest>View Code
MainActivity
package com.mytest.testcamera;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import android.app.Activity;import android.content.Intent;import android.hardware.Camera;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.widget.Button;import android.widget.Toast;import android.view.SurfaceView;import android.view.View;public class MainActivity extends Activity { private SurfaceView cameraPreview; private Button btnCamera; private Camera camera = null; private Callback camerPreCallBack = new Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { // 加载照相预览 startPreview(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { // 停止照相预览 stopPreview(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); cameraPreview = (SurfaceView) findViewById(R.id.sf_camera); cameraPreview.getHolder().addCallback(camerPreCallBack); btnCamera = (Button) findViewById(R.id.btn_camera); btnCamera.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 拍照 camera.takePicture(null, null, new Camera.PictureCallback() { @Override public void onPictureTaken(byte[] data, Camera camera) { // 把图片数据保存到临时目录 String path = savePictureFile(data); Log.v("info", "image temp path:" + path); if (path != null) { Intent intent = new Intent(MainActivity.this, PictureActivity.class); intent.putExtra("imgPath", path); startActivity(intent); } else { Toast.makeText(MainActivity.this, "保存照片失败", Toast.LENGTH_SHORT).show(); } } }); } }); } /** * 保存照片到临时目录 * * @param bytes * @return */ private String savePictureFile(byte[] bytes) { try { File file = File.createTempFile("camera", "img"); FileOutputStream fos = new FileOutputStream(file); fos.write(bytes); fos.flush(); fos.close(); return file.getAbsolutePath(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } private void startPreview() { camera = Camera.open(); try { camera.setPreviewDisplay(cameraPreview.getHolder()); camera.startPreview(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private void stopPreview() { camera.stopPreview(); camera.release(); } @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 boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); }}View Code
预览PictureActivity.java
package com.mytest.testcamera;import android.app.Activity;import android.net.Uri;import android.os.Bundle;import android.widget.ImageView;public class PictureActivity extends Activity { private ImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); imageView = new ImageView(this); setContentView(imageView); String path = getIntent().getStringExtra("imgPath"); if(path!=null){ imageView.setImageURI(Uri.parse(path)); } }}View Code
更多相关文章
- android 2.2 apidemos 赏析笔记 2
- Android相机Camera基础知识
- 【Android】使用MediaCodec硬编码实现视频直播推流端(一)
- 【Android】使用MediaCodec硬编码实现视频直播推流端(一)
- 【Android】使用MediaCodec硬编码实现视频直播推流端(一)
- Android日记抓取并保存
- 浅析Android手机卫士保存手机安全号码
- Android(安卓)Wear开发者预览配置过程
- android布局属性预览