点击手机图库图片来获取到点击的图片

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

如何把两张照片拼在一起

如何从图库中的图像中获取(提取)文本并搜索该文本 - Android?

为啥华为手机拍了照片保存不了怎么回事