经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
android加载系统相册图片并显示详解
来源:jb51  时间:2021/12/8 12:43:57  对本文有异议

1,下载ImageLoad.jar包放入项目libs文件夹中,并点击右键—>add as Library

2,首先记得在Manifest.xml注册权限(注:6.0以后的版本要在代码中动态注册权限)

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

3,布局文件,一个ImageView用来显示加载的图片,Button点击后进入系统相册选取图片

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context="com.zcn.demo.loadgallerypicture.MainActivity">
  8.  
  9. <ImageView
  10. android:id="@+id/pic"
  11. android:src="@mipmap/ic_launcher"
  12. android:layout_width="120dp"
  13. android:layout_height="120dp" />
  14. <Button
  15. android:id="@+id/btn"
  16. android:layout_width="match_parent"
  17. android:layout_height="48dp"
  18. android:layout_gravity="bottom"
  19. android:text="button"/>
  20. </LinearLayout>

4,.java文件

  1. package com.zcn.demo.loadgallerypicture;
  2.  
  3. import android.Manifest;
  4. import android.annotation.TargetApi;
  5. import android.app.Activity;
  6. import android.content.Intent;
  7. import android.content.pm.PackageManager;
  8. import android.database.Cursor;
  9. import android.graphics.Bitmap;
  10. import android.graphics.BitmapFactory;
  11. import android.net.Uri;
  12. import android.os.Build;
  13. import android.support.v4.content.ContextCompat;
  14. import android.support.v7.app.AppCompatActivity;
  15. import android.os.Bundle;
  16. import android.util.Log;
  17. import android.view.View;
  18. import android.widget.Button;
  19. import android.widget.ImageView;
  20.  
  21. import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
  22. import com.nostra13.universalimageloader.core.DisplayImageOptions;
  23. import com.nostra13.universalimageloader.core.ImageLoader;
  24. import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
  25. import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
  26.  
  27. import java.io.File;
  28. import java.io.FileOutputStream;
  29. import java.io.IOException;
  30.  
  31. public class MainActivity extends AppCompatActivity {
  32. private static int WRITE_SD_CODE = 1;
  33. private static int READ_SD_CODE = 2;
  34. private static String TAG = "ZCN_MainActivity";
  35. private ImageView image;
  36. private Button btn;
  37.  
  38. private String pic_path;
  39. private DisplayImageOptions options;
  40.  
  41. @Override
  42. protected void onCreate(Bundle savedInstanceState) {
  43. super.onCreate(savedInstanceState);
  44. setContentView(R.layout.activity_main);
  45. image = (ImageView)findViewById(R.id.pic);
  46. btn = (Button)findViewById(R.id.btn);
  47. btn.setOnClickListener(new View.OnClickListener() {
  48. @Override
  49. public void onClick(View view) {
  50. requestPermission();
  51. }
  52. });
  53. }
  54.  
  55. //android 6.0 以上版本要手动要求权限
  56. @TargetApi(Build.VERSION_CODES.M)
  57. private void requestPermission() {
  58. if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
  59. this.requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},READ_SD_CODE);
  60. }else {
  61. Log.v(TAG, "6.0一下版本直接打开相册....");
  62. Intent intent = new Intent(Intent.ACTION_PICK,
  63. android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  64. startActivityForResult(intent, ActivityRequestCode.SHOW_MAP_DEPOT);
  65. }
  66. }
  67.  
  68. //权限选择结果接收
  69. @Override
  70. public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  71. super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  72. if (requestCode == READ_SD_CODE) {
  73. if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  74. // 用户授予了此权限
  75. // 调用android自带的图库
  76. Intent intent = new Intent(Intent.ACTION_PICK,
  77. android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
  78. startActivityForResult(intent, ActivityRequestCode.SHOW_MAP_DEPOT);
  79. } else {
  80. // 用户拒绝了此权限
  81. }
  82. }
  83. }
  84.  
  85. public interface ActivityRequestCode {
  86. public static final int SHOW_MAP_DEPOT = 1; //显示Android自带图库,用于选择用户自己的图片
  87. }
  88.  
  89. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  90. super.onActivityResult(requestCode, resultCode, data);
  91. if (data != null) {
  92. if (requestCode == ActivityRequestCode.SHOW_MAP_DEPOT
  93. && resultCode == Activity.RESULT_OK)
  94. showPic(resultCode,data);
  95. }
  96. }
  97.  
  98. // 调用android自带图库,显示选中的图片
  99. private void showPic(int resultCode,Intent data) {
  100. if(resultCode== Activity.RESULT_OK) {
  101. if (data!=null) {
  102. Uri uri = data.getData();
  103. Log.v(TAG, "uri = "+uri);
  104. if (uri!=null) {
  105. Cursor cursor = getContentResolver().query(uri, null, null, null, null);
  106. //选择的就只是一张图片,所以cursor只有一条记录
  107. if (cursor != null) {
  108. if (cursor.moveToFirst()) {
  109. String path = cursor.getString(cursor.getColumnIndex("_data"));//获取相册路径字段
  110. Log.v(TAG, "打开相册获取的图片sd卡路径:" + path);
  111. File file = new File(path);
  112. initOptions();
  113. ImageLoader.getInstance().displayImage(uri.toString(), image,options);
  114. //保存图片到data/data/files文件夹下
  115. BitmapFactory.Options options = new BitmapFactory.Options();
  116. options.inJustDecodeBounds = true;
  117. Bitmap bitmap = BitmapFactory.decodeFile(path, options);
  118. File f = getFileStreamPath("ic_mine_head_portrait.jpg");
  119. Log.d(TAG, "File path :" + file.getParentFile());
  120. if (!f.exists()) {
  121. Log.d(TAG, "文件不存在");
  122. FileOutputStream out = null;
  123. try{
  124. f.createNewFile();
  125. out = new FileOutputStream(f);
  126. if(bitmap.compress(Bitmap.CompressFormat.PNG, 90, out))
  127. {
  128. out.flush();
  129. out.close();
  130. }
  131. } catch (IOException e) {
  132. e.printStackTrace();
  133. }finally {
  134. try {
  135. out.close();
  136. } catch (IOException e) {
  137. e.printStackTrace();
  138. }
  139. }
  140. }
  141. }
  142. }
  143. }
  144. }
  145. }else{
  146. Log.d(TAG,"放弃从相册选择");
  147. }
  148. }
  149.  
  150. private void initOptions(){
  151. options = new DisplayImageOptions.Builder().showStubImage(R.mipmap.ic_main_ad_stub) // 设置图片下载期间显示的图片
  152. .showImageForEmptyUri(R.mipmap.ic_main_ad_empty) // 设置图片Uri为空或是错误的时候显示的图片
  153. .showImageOnFail(R.mipmap.ic_main_ad_error) // 设置图片加载或解码过程中发生错误显示的图片
  154. .cacheInMemory(true) // 设置下载的图片是否缓存在内存中
  155. .cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中
  156. // .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
  157. .build(); // 创建配置过得DisplayImageOption对象
  158.  
  159. ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.getApplicationContext()).defaultDisplayImageOptions(options)
  160. .threadPriority(Thread.NORM_PRIORITY - 2).denyCacheImageMultipleSizesInMemory()
  161. .discCacheFileNameGenerator(new Md5FileNameGenerator()).tasksProcessingOrder(QueueProcessingType.LIFO).build();
  162. ImageLoader.getInstance().init(config);
  163. }
  164. }

后续:显示图片所使用的uri:

  1. String imageUri = "http://site.com/image.png"; // from Web
  2. String imageUri = "file:///mnt/sdcard/image.png"; // from SD card
  3. String imageUri = "content://media/external/audio/albumart/13"; // from content provider
  4. String imageUri = "assets://image.png"; // from assets
  5. String imageUri = "drawable://" + R.drawable.image; // from drawables (only images, non-9patch)

注意:使用drawable://除非你真的需要他。时刻要注意使用本地图片加载方法:setImageResource带代替ImageLoader。

到此这篇关于android加载系统相册图片并显示详解的文章就介绍到这了,更多相关android加载相册图片内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号