先说说我的遇到的问题:

1. 我在activity里写一个 fragment

2.这个fragment里有个 imageView ,用于显示图片。

我使用 asyncTask获得图片,并准备在这个imageView 中显示该图片的缩略图,我准备使用  ThumbnailUtils.extractThumbnail 方法生成缩略图。

我们先看看ThumbnailUtils.extractThumbnail(source, width, height);  这个方法的参数

    source 源文件(Bitmap类型)
    width  压缩成的宽度
      height 压缩成的高度

这里需要一个宽度和高度的参数。。要想再imageView里填满图片的话,这里就应该传入imageView的宽度和高度。

然而问题来了:在这里,使用imageView.getWidth方法获得宽度始终为0

经过一番搜索,终于找到解决方法,如下:

private void showImage(final File resultFileArg) {
if (resultFileArg != null && resultFileArg.exists()) {
// 添加下载图片至 imageView

ViewTreeObserver vto2 =
imageView1.getViewTreeObserver();
vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < 16) {
imageView1.getViewTreeObserver().removeGlobalOnLayoutListener(this);
} else {
imageView1.getViewTreeObserver().removeOnGlobalLayoutListener(this);
} Bitmap bm = BitmapFactory.decodeFile(resultFileArg.getPath()); Bitmap thumbnailImg = ThumbnailUtils.extractThumbnail(bm,
imageView1.getMeasuredWidth(),
imageView1.getMeasuredHeight());
bm.recycle(); imageView1.setImageBitmap(thumbnailImg);
// imageView1.setImageBitmap(bm);
}
});
}
}

使用步骤:

1.先获得imageView 的 一个ViewTreeObserver 对象。方法: imageView1.getViewTreeObserver()

2.为这个ViewTreeObserver 对象添加监听器(比如叫OnGlobalLayoutListener),方法:vto2.addOnGlobalLayoutListener

3.完成这个 OnGlobalLayoutListener的具体实现,在这个实现方法里就可以调用 imageView.getWidth方法 了。在这里完成我们需要的功能。

android 中遇到 imageView getWidth 始终为0 时 ,设置 setImageBitmap 的方法的更多相关文章

  1. Android中Listview点击item不变颜色以及设置listselector 无效

    Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...

  2. Android中View窗口getWidth和getMeasuredWidth的差别

    今天在研究自己定义listview的下拉刷新的效果.想移植到项目需求中,再看自己定义源代码时发现了一个问题就是getWidth和getMeasuredWidth两个方法有什么差别,求教万能的百度,经调 ...

  3. Android中的ImageView的scaleType属性详解

    ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layout xml中定义android:s ...

  4. Android中UI线程与后台线程交互设计的5种方法

    我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一 些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必 ...

  5. Android中UI线程与后台线程交互设计的6种方法

    在android的设计思想中,为了确保用户顺滑的操作体验.一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须要重新开启 一个后台线程运行这些任务.然而,往往这些任务最终又会直 ...

  6. Android中的gen文件为空或者不存在的处理方法

    Android中的gen文件时链接程序和XML中资源定义的桥梁,所以如果gen文件夹为空可能有以下的几个原因: 1.XML文件错误,这时可以检查res文件夹中的文件是否有错误 2.导入新的Androi ...

  7. Android中同一个ImageView中根据状态显示不同图片

    一般: if(条件1) { image.setBackground(R.id.xxx1); } else if (条件2) { image.setBackground(R.id.xxx2); } 实际 ...

  8. Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题

    获取ImageView的背景图片使用getDrawableCache方法,不要使用getDrawable方法,后者获取不到图片的. 1.在调用imageView.getDrawableCache()之 ...

  9. 关于android中出现failed to read row 0,column -1错误

    该错误出现的原因是Cursor.getColumnIndex()的参数列名不存在或者错误,这时返回值为-1.出现该错误

随机推荐

  1. CSS中易忽略的点

    一.使用斜杠/分割的关键字 1.font H2{ font:12px/100% sans-serif; } 分割的分别是 字体大小 与 行高 ,其他关键是用空白符分割. 2.background di ...

  2. jenkins 批量修改 去掉勾选Build whenever a SNAPSHOT dependency is built

    进入jenkins 的jobs的上一层目录 执行 sed -i 's/<ignoreUpstremChanges>false<\/ignoreUpstremChanges>/& ...

  3. 如何利用IPv6进行远程桌面连接

    如何利用IPv6进行远程桌面连接 学校是教育网,其中寝室和实验室的IPv4地址被划分成了两个VLAN,所以没法使用windows的远程连接功能.今天突然想到学校的IPv6地址可能并未划分成两个VLAN ...

  4. kafaka学习

    创建一个topic: [root@hdp1 bin]# ./kafka-topics. --replication-factor --partitions --topic justin Created ...

  5. haproxy 关闭ssl3

    在使用的过程中,我们发现在用IE浏览器的时候 我们设置成 然后我们的网站会出现部分页面不出来 然后我们也发现在扫面网站链接的时候 所以当务之急是关闭ssl3 我这里的反向代理使用的是haproxy 版 ...

  6. hdu 1879 继续通畅工程(最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...

  7. lua笔记二 赋值语句

    赋值是改变一个变量的值和改变表域的最基本的方法. a = "hello" .. "world" t.n = t.n + 1 Lua可以对多个变量同时赋值,变量列 ...

  8. The Linux Command Line,Script

    https://stackoverflow.com/questions/5891342/modify-conf-file-with-shell-script http://www.grymoire.c ...

  9. 15个Spring的核心注释示例

    众所周知,Spring DI和Spring IOC是Spring Framework的核心概念.让我们从org.springframework.beans.factory.annotation和org ...

  10. SSH登录详解

    1.什么是SSH登录 SSH是一种网络协议,用于计算机之间的加密登录. 相比传统的账户密码登录,SSH提供了一种更便捷安全的登录方式. 2.SSH登录流程 登录操作如下 ssh user@host S ...