setImageDrawable没有在API23上设置图像

时间:2017-02-13 14:25:50

标签: android android-gallery

我试图在Android API 23上将图像设置为我的CircleImageView。我从设备的内存中获取图像路径并将此字符串路径存储到数据库:

<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及之前,但它没有使用Android版API 23在Genymotion中的虚拟设备上运行。所选图像未显示在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 :(得分:1)

使用 FileUtils.getResizedBitmap()的方法存在问题。我创建了一个示例项目来重现您的问题。它在该示例项目中运行良好。使用下面的代码段时,从设备的内存中加载图像时不应该出现问题。

public class Temperature {

private double temp;
private String scale;

public Temperature(double temp) {
    this.temp = temp;
}

public String toString () {
    return "your temp is " + this.temp;
}

public double getTemp() {
    return this.temp;
}

public String getScale(String scale) {
    this.scale = scale;
    return this.scale;
}

public double conversion() {
    double temp = 0;
    if (this.scale == "fahrenheit") {
        temp = (this.temp - 32) * (double)(5/9);
    }
    else if (this.scale == "celsius") {
        temp = (this.temp * (double)(9/5)) + 32;
    }
    return temp;
}

public boolean aboveBoiling(double temp) {
    if (this.scale == "fahrenheit") {
        return temp >= 212;
    }
    else if (this.scale == "celsius") {
        return temp >= 100;
    }
    return true;

}