2017-02-13 50 views
0

我想設置爲我在Android API 23 CircleImageView圖像我從設備的存儲器中的圖像路徑和存儲這個字符串數據庫路徑:setImageDrawable沒有設置圖像上API23

<de.hdodenhof.circleimageview.CircleImageView 
    android:id="@+id/fragment_edit_picture" 
    android:layout_width="150dp" 
    android:layout_height="150dp" 
    android:layout_gravity="center" 
    android:layout_margin="5dp" 
    android:src="@mipmap/ic_launcher" 
    android:onClick="selectFromGallery" 
    app:civ_border_width="2dp" 
/> 

它正在處理API 19和之前的版本,但它不適用於Genymotion中的Android版本API 23中的虛擬設備。所選圖像未在ImageView中顯示。我將圖像設置爲ImageView:

mCurrentImagePath = FileUtils.getPath(getActivity(), selectedImageUri); 
Log.d(TAG, "mCurrentImagePath: " + mCurrentImagePath); 

// Update client's picture 
if (mCurrentImagePath != null && !mCurrentImagePath.isEmpty()) { 
    fragmentEditPicture.setImageDrawable(new BitmapDrawable(getResources(), 
      FileUtils.getResizedBitmap(mCurrentImagePath, 512, 512))); 
} 

圖像路徑是mCurrentImagePath: /storage/emulated/0/Download/56836_(5-27-2006 2-28-40)(1920x1200).JPG

你知道爲什麼這不起作用嗎?

+1

您是否在運行時請求了所需的權限? –

+0

@OgnianGloushkov號它沒有得到任何錯誤或異常。它只是不設置圖像。 –

回答

1

您正在使用的方法存在問題FileUtils.getResizedBitmap()。我創建了一個示例項目來重現您的問題。該示例項目中工作正常。使用下面的代碼片段時,從設備的內存中加載圖像時應該沒有問題。

public static Bitmap getResizedBitmap(String imagePath, int width, int height) { 
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath); 
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, width, height, false); 
    // Recycling the bitmap, because it's already used and not needed anymore 
    bitmap.recycle(); 
    return resizedBitmap; 
} 
+0

使用後回收原始的「位圖」。首先使用'BitmapFactory.Options.inJustDecodeBounds'。 –

+0

@EugenPechanec哥們,對不起,我沒有得到你說的確切內容!我是新的android.this是[FileUtils.getResizedBitmap()](http://codepad.org/c33ilHxK)。並在方法中使用options.inJustDecodeBounds = false;根據我的理解你的建議,我用這種方式[鏈接](http://codepad.org/oiskWKwf),但我得到錯誤[鏈接](http://codepad.org/wqGYmUHx) .sorry,非常感謝你 –

+0

'mCurrentImagePath'是我選擇的圖像路徑不是uri。 –

相關問題