標籤:
在學習安卓期間,都是通過寫死一個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.:
點擊手機圖庫圖片來擷取到點擊的圖片