記錄SimpleDraweeView拍照後 載入顯示所拍圖片,重複顯示第一張照片的問題
阿新 • • 發佈:2018-11-22
問題描述:
先拍照,使用SimpleDraweeView顯示照片的縮圖,但是遇到一個問題,就是重新拍照顯示的時候,都只是顯示拍的第一張照片的縮圖。試了修改了好多東西,最後發現 每次圖片 的名字都不一樣的話,才能顯示不同的圖。
程式碼如下:
一、xml:
<com.facebook.drawee.view.SimpleDraweeView android:id="@+id/photo_cashDeskPhoto" android:layout_width="46dp" android:layout_height="match_parent" android:layout_marginBottom="5dp" android:layout_marginTop="5dp" app:failureImage="@mipmap/showphotofailure"//聯網圖片重複載入4次失敗後顯示的圖片,但是我是載入本地圖片,圖片uri不對,顯示 app:failureImageScaleType="fitCenter" app:placeholderImage="@mipmap/photo_default"//預設顯示圖片 app:placeholderImageScaleType="fitCenter"//預設顯示圖片佈局 app:progressBarAutoRotateInterval="1000"//載入進度圖轉動間隔 app:progressBarImage="@mipmap/loading"//載入進度圖 app:progressBarImageScaleType="fitCenter"/>
二、Java程式碼:
1、呼叫相機拍照,並儲存照片到本地相簿
private static int photo_index = 0;
String cameraPath = Environment.getExternalStorageDirectory() + File.separator +
Environment.DIRECTORY_DCIM + File.separator + "Camera" + File.separator;//系統相簿路徑
private void capture() { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); String filePath = cameraPath + File.separator + "huangheBank";//照片儲存資料夾 File localFile = new File(filePath); if (!localFile.exists()) { localFile.mkdir(); } //在生成圖片檔案的時候,不使用固定的 圖片名,這樣每次載入的縮圖就是對應新拍照片的 File file = new File(filePath, "cashdesk_" + photo_index + ".jpg"); //File file = new File(filePath, "cashdesk.jpg"); uri = Uri.fromFile(file); intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); startActivityForResult(intent, IntentCode.REQUEST_CODE_IMAGE); }
2、拍照結果:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); //1、這裡是為了解決題目問題的第一個嘗試,想先把simpleDraweeView的圖片資源設定成預設的,然後再設定成剛拍的,但是沒用 // photoCashDeskPhoto.setImageResource(R.mipmap.hhgl_23); if (requestCode == IntentCode.REQUEST_CODE_IMAGE && resultCode == RESULT_OK) { //2、這裡是為了解決題目問題的第二個嘗試,想設定controller,通過setTapToRetryEnable屬性來讓圖片重新載入,但是也不行,這個是屬性 //是在載入網路圖片時候,點選控制元件可以重新載入圖片的屬性,我點選控制元件拍照,然後載入本地照片,這個屬性沒用 // DraweeController draweeController = Fresco.newDraweeControllerBuilder() // .setUri(uri) // .setTapToRetryEnabled(true)//點選重試是否開啟 // .setOldController(photoCashDeskPhoto.getController()) // .build(); // photoCashDeskPhoto.setController(draweeController); //設定顯示的圖片uri photoCashDeskPhoto.setImageURI(uri); //儲存圖片後傳送廣播通知更新資料庫,從而使圖片在相簿重新整理顯示出來 sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri)); //3、讓下次拍的圖片名字改變,這樣下次控制元件載入照片的時候,載入的就是最新拍照片的縮圖 //我根據這個結果得到的原因是,如果使用固定的圖片名字,系統生成的縮圖不會更新,所以控制元件顯示的縮圖也不變 //但是真實的原因過程,可能要從simpleDraweeView的原始碼來看了。 photo_index++; } }