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.出现该错误
随机推荐
- HTML自定义对象与属性探究(谷歌,火狐,IE9浏览器没问题)
1.自定义标签 <zqz>asdas</zqz> <style> zqz{ color:red; } </style> 页面变色 2.自定义标签的hov ...
- Feign请求中报错:Request header is too large 的解决方案。
现在我们项目中都已迁入spring boot和spring cloud. 服务间调用现在都改成feign的调用方式,但是上次在实际使用过程中出现过:Request header is too larg ...
- linux php7.1 安装redis扩展
redis扩展下载网址 http://pecl.php.net/package/redis wget http://101.96.10.64/pecl.php.net/get/redis-3.1.3. ...
- WPF使用System.Windows.SystemParameters类获得屏幕分辨率
转自 http://hi.baidu.com/shirley_cst/item/a55c290c8aa2ee2ca0312da3 示例代码如下所示. double x = SystemParamete ...
- AliSQL 5.6.32 vs MySQL 5.7.15抢鲜测试
摘要: 今天我们有幸抢鲜测试AliSQL,直接拿来和MySQL 5.7.15对比看看. AliSQL刚宣布开源,我就提交申请内测名额,节前收到开放内测邀请,于是第一时间进行了测试了解,希望能给大 ...
- java、oracle对CLOB处理
oracle CLOB字段转换位VARCHAR 1.实际上处理CLOB字段的时候,直接TO_CHAR,当长度超过4000的时候,会报错,提示列被截取: CLOB转varchar2:select to_ ...
- mybatis一对一和一对多实例
一对一:<association></association> 一对多:<collection></collection> ClassMapper.xm ...
- Atitit hibernate3 hinernate4 hibernate5新特性attilax总结
Atitit hibernate3 hinernate4 hibernate5新特性attilax总结 1.1. Hibernate3的新特性 1 1.2. hibernate4.1版本中的新特性和h ...
- Atitit opencv3.0 3.1 3.2 新特性attilax总结
Atitit opencv3.0 3.1 3.2 新特性attilax总结 1. 3.0OpenCV 3 的改动在哪?1 1.1. 模块构成该看哪些模块?2 2. 3.1新特性 2015-12-21 ...
- android源码上面开发App
使用eclipse 打开源码:http://blog.csdn.net/androidlover1991/article/details/17011991 使用android studio 打开源码h ...