Android相機(jī)、圖冊(cè)demo
本文為大家分享了Android相機(jī)、圖冊(cè)基本demo,供大家參考,具體內(nèi)容如下
package com.example.democamera; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.view.View; import android.widget.ImageView; public class MainActivity extends Activity { private ImageView iv; static final int gallery = 1, camera = 2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv_picture); } /** * 啟動(dòng)圖片畫(huà)廊 * * @param view */ public void startGallery(View view) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); startActivityForResult(intent, gallery); } /** * 啟動(dòng)相機(jī) * * @param view */ public void startCamera(View view) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (isSDExsit()) { /* 創(chuàng)建存放圖片文件夾 */ File dir = new File(Environment.getExternalStorageDirectory() + "/my"); if (!dir.exists()) dir.mkdirs(); /* 設(shè)置圖片參數(shù) 得到原尺寸的圖片 */ File file = new File(dir, "aaa.jpg"); intent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, Configuration.ORIENTATION_UNDEFINED); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); } startActivityForResult(intent, camera); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case gallery: /* 做判斷,防止返回報(bào)錯(cuò) */ if (data != null) { /* * 三種方式處理URI */ Uri uri = data.getData(); iv.setImageURI(uri); Bitmap bitmap = BitmapFactory .decodeFile(getPathByUri(uri, this)); iv.setImageBitmap(bitmap); Bitmap bitmap2 = getBitmapByUri(uri, this); iv.setImageBitmap(bitmap2); } break; case camera: if (data != null) {// 這是獲得縮略圖的方法 Bitmap b = (Bitmap) data.getExtras().get("data"); iv.setImageBitmap(b); } else {// 有sd卡得到圖片原圖 Bitmap bitmap = BitmapFactory.decodeFile("sdcard/my/aaa.jpg");//直接這樣做會(huì)有發(fā)生OOM的風(fēng)險(xiǎn),Demo簡(jiǎn)單這么處理 iv.setImageBitmap(bitmap); } break; default: break; } } /** * Uri-->Bitmap * * @param uri * @param context * @return */ public static Bitmap getBitmapByUri(Uri uri, Context context) { Bitmap bitmap = null; try { bitmap = MediaStore.Images.Media.getBitmap( context.getContentResolver(), uri); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return bitmap; } /** * Uri--->Path * * @param uri * @param context * @return */ public static String getPathByUri(Uri uri, Context context) { String path = null; String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null); if (cursor.moveToFirst()) { int index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); path = cursor.getString(index); } return path; } /** * 判斷SD卡是否存在 * * @return */ public static boolean isSDExsit() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { return true; } else { return false; } } }
下面分享具體Android 調(diào)用相機(jī)、打開(kāi)相冊(cè)、裁剪圖片的實(shí)現(xiàn)代碼,內(nèi)容如下
private ImageView iv_user_photo; private String fileName = ""; private File tempFile; private int crop = 300;// 裁剪大小 private static final int OPEN_CAMERA_CODE = 10; private static final int OPEN_GALLERY_CODE = 11; private static final int CROP_PHOTO_CODE = 12; private OnClickListener PopupWindowItemOnClick = new OnClickListener() { @Override public void onClick(View v) { menuWindow.dismiss(); switch (v.getId()) { // 拍照 case R.id.btn_camera: initFile(); openCamera(); break; // 相冊(cè) case R.id.btn_gallery: initFile(); openGallery(); break; default: break; } } }; public void initFile() { if(fileName.equals("")) { if(FileUtil.existSDCard()) { String path = Environment.getExternalStorageDirectory() + File.separator + "JanuBookingOnline" + File.separator; FileUtil.mkdir(path); Logger.i("path:" + path); fileName = path + "user_head_photo.jpg"; tempFile = new File(fileName); } else { CommonUitl.toast(context, "請(qǐng)插入SD卡"); } } } /** * 調(diào)用相機(jī) */ public void openCamera() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);// 打開(kāi)相機(jī) intent.putExtra("output", Uri.fromFile(tempFile)); startActivityForResult(intent, OPEN_CAMERA_CODE); } /** * 打開(kāi)相冊(cè) */ public void openGallery() { Intent intent = new Intent(Intent.ACTION_PICK);// 打開(kāi)相冊(cè) intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*"); intent.putExtra("output", Uri.fromFile(tempFile)); startActivityForResult(intent, OPEN_GALLERY_CODE); } /** * 裁剪圖片 * @param uri */ public void cropPhoto(Uri uri) { Intent intent = new Intent("com.android.camera.action.CROP"); intent.setDataAndType(uri, "image/*"); intent.putExtra("output", Uri.fromFile(tempFile)); intent.putExtra("crop", true); intent.putExtra("aspectX", 1); intent.putExtra("aspectY", 1); intent.putExtra("outputX", crop); intent.putExtra("outputY", crop); startActivityForResult(intent, CROP_PHOTO_CODE); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == 1) return; switch (requestCode) { case OPEN_CAMERA_CODE: cropPhoto(Uri.fromFile(tempFile)); break; case OPEN_GALLERY_CODE: cropPhoto(data.getData()); break; case CROP_PHOTO_CODE: try { BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile(fileName, options); if (bitmap != null) { iv_user_photo.setImageBitmap(bitmap); CommonUitl.sharedPreferences(context, AppConstants.USER_PHOTO, fileName); } } catch (Exception e) { e.printStackTrace(); } break; default: break; } super.onActivityResult(requestCode, resultCode, data); }
以上就是關(guān)于Android相機(jī)、圖冊(cè)的基本操作內(nèi)容,希望對(duì)大家學(xué)習(xí)Android軟件編程有所幫助。
- Android打開(kāi)相機(jī)和相冊(cè)實(shí)例代碼
- Android實(shí)用控件自定義逼真相機(jī)光圈View
- Android實(shí)現(xiàn)IOS相機(jī)滑動(dòng)控件
- Android實(shí)現(xiàn)用戶頭像更換操作
- Android仿微信群聊頭像
- Android拍照或從圖庫(kù)選擇圖片并裁剪
- Android實(shí)現(xiàn)拍照、選擇圖片并裁剪圖片功能
- 解決Android從相冊(cè)中獲取圖片出錯(cuò)圖片卻無(wú)法裁剪問(wèn)題的方法
- Android裁剪圖片為圓形圖片的實(shí)現(xiàn)原理與代碼
- Android實(shí)現(xiàn)相機(jī)拍攝、選擇、圖片裁剪功能
相關(guān)文章
教你如何使用platform密鑰對(duì)apk進(jìn)行簽名
這篇文章主要介紹了教你如何使用platform密鑰對(duì)apk進(jìn)行簽名,需要的朋友可以參考下2014-06-06在Android app中實(shí)現(xiàn)九(n)宮格圖片連續(xù)滑動(dòng)效果
這篇文章主要介紹了在Android app中實(shí)現(xiàn)九(n)宮格圖片連續(xù)滑動(dòng)效果的方法,作者舉了鳳凰新聞應(yīng)用的例子,同理功能圖標(biāo)也可以利用這樣的滑動(dòng)效果,需要的朋友可以參考下2016-02-02Flutter封裝組動(dòng)畫(huà)混合動(dòng)畫(huà)AnimatedGroup示例詳解
這篇文章主要為大家介紹了Flutter封裝組動(dòng)畫(huà)混合動(dòng)畫(huà)AnimatedGroup示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Android中實(shí)現(xiàn)HashMap排序的方法
這篇文章主要介紹了Android中實(shí)現(xiàn)HashMap排序的方法,很經(jīng)典的一種排序算法,需要的朋友可以參考下2014-08-08簡(jiǎn)單仿寫(xiě)Android控件SlidingMenu的實(shí)例代碼
下面小編就為大家分享一篇簡(jiǎn)單仿寫(xiě)Android控件SlidingMenu的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01設(shè)計(jì)簡(jiǎn)單的Android圖片加載框架
這篇文章主要為大家詳細(xì)介紹了Android圖片加載框架的簡(jiǎn)單設(shè)計(jì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09深入分析Android NFC技術(shù) android nfc開(kāi)發(fā)
本篇文章我們對(duì)android開(kāi)發(fā)中nfc技術(shù)做了全面的原理分析以及實(shí)現(xiàn)過(guò)程,需要的讀者們一起參考一下吧。2017-11-11android?Service基礎(chǔ)(啟動(dòng)服務(wù)與綁定服務(wù))
大家好,本篇文章主要講的是android?Service基礎(chǔ)(啟動(dòng)服務(wù)與綁定服務(wù)),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12