关于ImageView显示Bitmap图片的问题

zkw261123 2017-09-05 10:09:47
自学Android开发,最近想写一个小软件,实现类似图库的功能。
其中有一个主要功能有问题,就是在Fragment中的ImageView无法显示Bitmap对象的图片,但可以显示drawable中的图片
Bitmap对象中有一个在外部存储的图片
无论图片大小(尺寸或占用空间),ImageView都无法显示Bitmap图片。
权限我已经在AndroidManifest.xml中给了,代码如下:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

百度折腾了很久,找不到解答,来这里请各位大佬帮忙解答一下,谢谢!!

我的代码如下:
Fragment布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
android:id="@+id/pic"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/ic_background_20_48dp" />

</LinearLayout>


Fragment的源文件,PicFragment.java:


import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.io.File;


/**
* Created by 97890 on 2017/8/28.
*/

public class PicFragment extends Fragment {

private static final String TAG = "PicFragment";
private static final String sourcePathKey = "Path";
private String sourcePath;
//sourcePath是外部存储中的一张图片的路径,在onCreateView()中初始化
private ImageView pic;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.layout_fragment,container,false);
pic = v.findViewById(R.id.pic);
sourcePath = getArguments().getString(sourcePathKey);
showPic();
//如果注释掉这句,Fragment中的ImageView将显示默认的图片(drawable/ic_background_20_48dp.png)
//如果取消注释这句,Fragment中的ImageView将一片空白,不显示我指定的,存放在外部存储的图片
return v;
}

//空的构造方法
public PicFragment(){
super();
}

//创建一个PicFragment的对象,传参并返回该对象
public static PicFragment createdFragment(String sourcePath){
PicFragment fragment = new PicFragment();
Bundle args = new Bundle();
args.putString(sourcePathKey, sourcePath);
fragment.setArguments(args);
return fragment;
}

//将路径为sourcePath的图片显示到ImageView中
public void showPic(){
Bitmap bm = getLoacalBitmap();
if(bm != null)
pic.setImageBitmap(bm);
}

//解码路径为sourcePath的图片,并返回一个Bitmap的对象
public Bitmap getLoacalBitmap() {
File file = new File(sourcePath);
if(file.exists()){
Bitmap bitmap = BitmapFactory.decodeFile(sourcePath);
return bitmap;
}
else
return null;
}
}


...全文
1320 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38880315 2017-10-27
  • 打赏
  • 举报
回复
请问该如何解决啊,我也遇到这个问题,求权限如何申请?
zkw261123 2017-09-05
  • 打赏
  • 举报
回复
引用 1 楼 qq_33667176 的回复:
打印一下路径是否正确,bitmap是不是null
根据你的思路,我发现bitmap确实为空,然后我搜索了一下,发现还是权限问题。 因为API>=23的情况下,需要动态申请权限。申请完后就能显示了。。。 还是谢谢你帮我开拓解决问题的思路!!
zkw261123 2017-09-05
  • 打赏
  • 举报
回复
引用 1 楼 qq_33667176 的回复:
打印一下路径是否正确,bitmap是不是null
路径正确 但是bitmap为空???
德超 2017-09-05
  • 打赏
  • 举报
回复
打印一下路径是否正确,bitmap是不是null

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧