1. 程式人生 > >記錄SimpleDraweeView拍照後 載入顯示所拍圖片,重複顯示第一張照片的問題

記錄SimpleDraweeView拍照後 載入顯示所拍圖片,重複顯示第一張照片的問題

問題描述:

    先拍照,使用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++;

          
        }
    }