android 中遇到 imageView getWidth 始终为0 时 ,设置 setImageBitmap 的方法
先说说我的遇到的问题:
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 的方法的更多相关文章
- Android中Listview点击item不变颜色以及设置listselector 无效
Android中Listview点击item不变颜色以及设置listselector 无效 这是同一个问题,Listview中点击item是会变颜色的,因为listview设置了默认的listsele ...
- Android中View窗口getWidth和getMeasuredWidth的差别
今天在研究自己定义listview的下拉刷新的效果.想移植到项目需求中,再看自己定义源代码时发现了一个问题就是getWidth和getMeasuredWidth两个方法有什么差别,求教万能的百度,经调 ...
- Android中的ImageView的scaleType属性详解
ImageView的Scaletype决定了图片在View上显示时的样子,如进行何种比例的缩放,及显示图片的整体还是部分,等等. 设置的方式包括: 1. 在layout xml中定义android:s ...
- Android中UI线程与后台线程交互设计的5种方法
我想关于这个话题已经有很多前辈讨论过了.今天算是一次学习总结吧. 在android的设计思想中,为了确保用户顺滑的操作体验.一 些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必 ...
- Android中UI线程与后台线程交互设计的6种方法
在android的设计思想中,为了确保用户顺滑的操作体验.一些耗时的任务不能够在UI线程中运行,像访问网络就属于这类任务.因此我们必须要重新开启 一个后台线程运行这些任务.然而,往往这些任务最终又会直 ...
- Android中的gen文件为空或者不存在的处理方法
Android中的gen文件时链接程序和XML中资源定义的桥梁,所以如果gen文件夹为空可能有以下的几个原因: 1.XML文件错误,这时可以检查res文件夹中的文件是否有错误 2.导入新的Androi ...
- Android中同一个ImageView中根据状态显示不同图片
一般: if(条件1) { image.setBackground(R.id.xxx1); } else if (条件2) { image.setBackground(R.id.xxx2); } 实际 ...
- Android中的ImageView的getDrawableCache获取背景图片的时候注意的问题
获取ImageView的背景图片使用getDrawableCache方法,不要使用getDrawable方法,后者获取不到图片的. 1.在调用imageView.getDrawableCache()之 ...
- 关于android中出现failed to read row 0,column -1错误
该错误出现的原因是Cursor.getColumnIndex()的参数列名不存在或者错误,这时返回值为-1.出现该错误
随机推荐
- axios 简单常用笔记
简单认知: 1.config.data是POST参数,config.params是GET参数 axios(url, [config]) + qs + application/x-www-form-ur ...
- java 中获得 资源文件方法
1 java 中获取资源文件的方法 项目目录如下 获取当前项目的目录路径 方法一:使用类名 MergeDocHandler.class.getClassLoader().getResource(&qu ...
- Django的AutoField字段
[Django是一个机智的框架] 默认情况下Djang会为ORM中定义的每一张表加上一个自增ID列,并且用这个列来做主键:出于一个MySQL-DBA的工作经历我觉得 Djanog还真是机智:这样么说主 ...
- ipod classic 检查硬盘方法
长按(中间键+MENU)重启接着按(中键+左键)一直进入工程模式进入后顺序是:menu-IO-HARDDRIVE-HDSMARTDATA 就可以看到了. retracts--硬盘磁头非正常退回,比如硬 ...
- Shiro(一):shiro架构和组件介绍
简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份认证.授权.加密和会话管理.使用Shiro的易于理解的API,可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网 ...
- 如何运行你的Android程序?
原文链接:http://android.eoe.cn/topic/android_sdk 本文中你将了解到: 1. 在真机上运行App 2. 在模拟器上运行App 你还应该阅读: 1. Using H ...
- GDC2017资料整理
GDC2017的资料最近放出来了,我筛选了一下 特别是Horizon放出很多干货,也有一些去年的末班车.Vulkan有一堆,但不是很感兴趣 感谢王同学的搬运和分类(包含以下链接pdf和视频): htt ...
- vue2.x 路由懒加载 优化打包体积
当打包构建应用时,Javascript 包会变得非常大,影响页面加载.如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了. 结合 Vue 的异步组 ...
- 常用sql自定义函数
--把数字转为千分位格式的字符串显示,调用如 select dbo.f_splitstr(11111111111111) CREATE FUNCTION [dbo].[f_splitstr]( @st ...
- mysql中tinyint、smallint、int、bigint的区别
tinyint 从 -2^7 (-128) 到 2^7 - 1 (123) 的整型数据.存储大小为 1 个字节. unsigned 是从 0 到 255 的整型数据. 所以建表的时候 只能是tinyi ...