点击手机图库图片来获取到点击的图片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了点击手机图库图片来获取到点击的图片相关的知识,希望对你有一定的参考价值。
在学习安卓期间,都是通过写死一个url来获取一个图片,但是如何实现在没有图片url的情况下通过点击图片来获取url呢,这个问题一直困扰着笔者,今天有时间查阅网上大量资料,经过反复测试终于成功了,现将代码分享如下.由于笔者能力有限,错误之处在所难免,欢迎大家不吝指正,如本篇文章触犯了您的利益,请联系本人.谢谢!
环境:android Studio+Genymotion
01.布局:
<?xml version="1.0" encoding="utf-8"?> <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="www.itcast.com.testchoicepic.MainActivity"> <Button android:id="@+id/btn_select_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="选择图片" /> <ImageView android:id="@+id/iv_show_pic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/ic_launcher" /> </LinearLayout>
02. 主要代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_select_pic; private ImageView iv_show_pic; //请求码,用来和onActivityResult中的requestCode做比较,判断是不是同一个请求 public static final int REQUEST_CODE = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btn_select_pic = (Button) findViewById(R.id.btn_select_pic); iv_show_pic = (ImageView) findViewById(R.id.iv_show_pic); btn_select_pic.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_select_pic: Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intent, REQUEST_CODE); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //注意判断:resultCode == RESULT_OK if (requestCode==REQUEST_CODE&&resultCode == RESULT_OK && data != null) { Uri selectImageUrl = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; Cursor cursor = getContentResolver().query(selectImageUrl, filePathColumn, null, null, null); cursor.moveToFirst(); String picPath = cursor.getString(cursor.getColumnIndex(filePathColumn[0])); cursor.close(); try { //1.使用原生的图片显示办法 Bitmap bitmap = BitmapFactory.decodeFile(picPath); iv_show_pic.setImageBitmap(bitmap); //2.使用第三方框架显示也可以,但是需要在app/build.gradle里面添加依赖:compile ‘com.github.bumptech.glide:glide:3.7.0‘ /* Glide .with(this) // 指定Context .load(picPath)// 指定图片的URL .placeholder(R.mipmap.ic_launcher)// 指定图片未成功加载前显示的图片 .error(R.mipmap.ic_launcher)// 指定图片加载失败显示的图片 .skipMemoryCache(true)// 跳过内存缓存 .diskCacheStrategy(DiskCacheStrategy.NONE)//跳过磁盘缓存 .diskCacheStrategy(DiskCacheStrategy.SOURCE)//仅仅只缓存原来的全分辨率的图像 .diskCacheStrategy(DiskCacheStrategy.RESULT)//仅仅缓存最终的图像 .diskCacheStrategy(DiskCacheStrategy.ALL)//缓存所有版本的图像 .priority(Priority.HIGH)//指定优先级.Glide 将会用他们作为一个准则,并尽可能的处理这些请求,但是它不能保证所有的图片都会按照所要求的顺序加载。优先级排序:IMMEDIATE > HIGH > NORMAL > LOW .into(iv_show_pic);//指定显示图片的ImageView*/ } catch (Exception e) { e.printStackTrace(); } } } }
03.效果图:
以上是关于点击手机图库图片来获取到点击的图片的主要内容,如果未能解决你的问题,请参考以下文章
data.getData() 在 OnActvityResult 中返回 null,同时从相机和图库中获取/选择图片
在文件夹中可以找到图片,为啥在图库中显示不出来? 我的手机是华为荣耀2