标签:
在学习安卓期间,都是通过写死一个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.效果图:

标签:
原文地址:http://www.cnblogs.com/Tom896766857/p/5874048.html