歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android-ImageView顯示選擇本地圖片或拍照

Android-ImageView顯示選擇本地圖片或拍照

日期:2017/3/1 10:20:52   编辑:Linux編程

最近寫項目,遇到了,在此記錄一下。Android-ImageView顯示選擇本地圖片或拍照.

  1. import java.io.ByteArrayOutputStream;
  2. import java.io.InputStream;
  3. import android.app.Activity;
  4. import android.app.AlertDialog;
  5. import android.content.ContentResolver;
  6. import android.content.DialogInterface;
  7. import android.content.Intent;
  8. import android.database.Cursor;
  9. import android.graphics.Bitmap;
  10. import android.graphics.BitmapFactory;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.provider.MediaStore;
  14. import android.view.View;
  15. import android.view.View.OnClickListener;
  16. import android.widget.ImageView;
  17. public class PicChooserActivity extends Activity {
  18. /** Called when the activity is first created. */
  19. private ImageView imageView;
  20. private OnClickListener imgViewListener;
  21. private Bitmap myBitmap;
  22. private byte[] mContent;
  23. @Override
  24. public void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. imageView =(ImageView) findViewById(R.id.ivPic);
  28. imageView.setOnClickListener(new OnClickListener() {
  29. @Override
  30. public void onClick(View v) {
  31. // TODO Auto-generated method stub
  32. final CharSequence[] items = { "相冊", "拍照" };
  33. AlertDialog dlg = new AlertDialog.Builder(PicChooserActivity.this).setTitle("選擇照片").setItems(items,
  34. new DialogInterface.OnClickListener() {
  35. @Override
  36. public void onClick(DialogInterface dialog, int which) {
  37. // TODO Auto-generated method stub
  38. //這裡item是根據選擇的方式, 在items數組裡面定義了兩種方式,拍照的下標為1所以就調用拍照方法
  39. if(which==1){
  40. Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE");
  41. startActivityForResult(getImageByCamera, 1);
  42. }else{
  43. Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
  44. getImage.addCategory(Intent.CATEGORY_OPENABLE);
  45. getImage.setType("image/jpeg");
  46. startActivityForResult(getImage, 0);
  47. }
  48. }
  49. }).create();
  50. dlg.show();
  51. }
  52. });
  53. }
  54. @Override
  55. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  56. // TODO Auto-generated method stub
  57. super.onActivityResult(requestCode, resultCode, data);
  58. ContentResolver contentResolver =getContentResolver();
  59. /**
  60. * 因為兩種方式都用到了startActivityForResult方法,這個方法執行完後都會執行onActivityResult方法,
  61. * 所以為了區別到底選擇了那個方式獲取圖片要進行判斷,這裡的requestCode跟startActivityForResult裡面第二個參數對應
  62. */
  63. if(requestCode==0){
  64. //方式一
  65. /*try {
  66. //獲得圖片的uri
  67. Uri orginalUri = data.getData();
  68. //將圖片內容解析成字節數組
  69. mContent = readStream(contentResolver.openInputStream(Uri.parse(orginalUri.toString())));
  70. //將字節數組轉換為ImageView可調用的Bitmap對象
  71. myBitmap =getPicFromBytes(mContent,null);
  72. ////把得到的圖片綁定在控件上顯示
  73. imageView.setImageBitmap(myBitmap);
  74. } catch (Exception e) {
  75. e.printStackTrace();
  76. // TODO: handle exception
  77. }*/
  78. //方式二
  79. try {
  80. Uri selectedImage = data.getData();
  81. String[] filePathColumn = { MediaStore.Images.Media.DATA };
  82. Cursor cursor = getContentResolver().query(selectedImage,
  83. filePathColumn, null, null, null);
  84. cursor.moveToFirst();
  85. int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
  86. String picturePath = cursor.getString(columnIndex);
  87. cursor.close();
  88. imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
  89. } catch (Exception e) {
  90. // TODO: handle exception
  91. e.printStackTrace();
  92. }
  93. }else if(requestCode==1){
  94. try {
  95. Bundle extras = data.getExtras();
  96. myBitmap = (Bitmap) extras.get("data");
  97. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  98. myBitmap.compress(Bitmap.CompressFormat.JPEG , 100, baos);
  99. mContent=baos.toByteArray();
  100. } catch (Exception e) {
  101. e.printStackTrace();
  102. // TODO: handle exception
  103. }
  104. imageView.setImageBitmap(myBitmap);
  105. }
  106. }
  107. public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) {
  108. if (bytes != null)
  109. if (opts != null)
  110. return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts);
  111. else
  112. return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
  113. return null;
  114. }
  115. public static byte[] readStream(InputStream in) throws Exception{
  116. byte[] buffer =new byte[1024];
  117. int len =-1;
  118. ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  119. while((len=in.read(buffer))!=-1){
  120. outStream.write(buffer, 0, len);
  121. }
  122. byte[] data =outStream.toByteArray();
  123. outStream.close();
  124. in.close();
  125. return data;
  126. }
  127. }

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved