imageView--转-如何代码动态的获取和设置ImageView的宽度和高度?
11-
12-
13-android获取图片原始长宽;
=========
11--国内某金融企业的一道面试题:如何在代码中获得一个ImageVIew的高度和宽度?
相信很大一部分人,会直接想到用imageview.getWidth() 和 imageview.getHeight() 来获得,其实不然。
我们可以自己写个程序来跑一下,当我们放置一张图片在imageView中,并且设置了它的高度和宽度,我们不妨在日志控制台输出看一下,
Log.i("MainActivity", "宽度:"+String.valueOf(imageView.getWidth()));
Log.i("MainActivity", "高度:"+String.valueOf(imageView.getHeight()));
输出结果如下:
是不是很恼火呀,结果就是这样。
那么究竟该如何获取图片的高度和宽度呢? 其实,我们可以通过构建一个BItMap对象出来,这个BItMap就是从我们的那种图片资源转换而来,bitmap对象中的getWidth() 和getHeight()可以获得位图的大小,例子:
- ImageView imageView = (ImageView)findViewById(R.id.imageView);
- Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.newscar);
- Log.i("MainActivity", "宽度:"+String.valueOf(bitmap.getWidth()));
- Log.i("MainActivity", "高度:"+String.valueOf(bitmap.getHeight()));
这个时候我们再来看一下日志控制台的输出结果:
Ok,第一个问题我们搞定了(注意:这是原图片的大小,不是我们布局文件中设置的大小)。
12--我们看一下如何动态设置图片的高度和宽度,这问题比较简单,我们直接使用LayoutParams的对象来进行设置
代码如下:
- ImageView imageView = (ImageView)findViewById(R.id.imageView);
- imageView.setImageResource(R.drawable.newscar);
- LayoutParams params = imageView.getLayoutParams();
- params.height=200;
- params.width =100;
- imageView.setLayoutParams(params);
13--android获取图片原始长宽
在android里面要要取一张96 x 96像素每个像素点的RGB值然后处理,但是一开始直接读取
- Bitmap mBitmap =BitmapFactory.decodeResource(getResources(), R.drawable.jimg001);
- int width=opts.outWidth;
- int height=opts.outHeight;
这样读出来的值却实变成了144 x 144像素,很无语,对Android接触不多,查看各种资料才发现如果这样写android默认读取的不是原始大小
- BitmapFactory.Options opts = new BitmapFactory.Options();
- opts.inJustDecodeBounds = true;
- BitmapFactory.decodeResource(getResources(), R.drawable.jimg001, opts);
- opts.inSampleSize = 1;
- opts.inJustDecodeBounds = false;
- Bitmap mBitmap =BitmapFactory.decodeResource(getResources(), R.drawable.jimg001, opts);
- int width=opts.outWidth;
- int height=opts.outHeight;
将BitmapFactory.Options.inSampleSize设为1才是原始大小,有时候根据需要因为图片太大而内存溢出时,需要适当选择inSampleSize的值,可以参考http://hi.baidu.com/liganggang/item/6ab1e480fa2da1e3e596e015
最新文章
- 支持“ApplicationDbContext”上下文的模型已在数据库创建后发生更改
- Xenocode Postbuild 2010 for .NET 使用说明
- 转载:ORA-01438: 值大于为此列指定的允许精度
- LTE Module User Documentation(翻译15)——示例程序、参考场景以及故障检测和调试技巧
- 树莓派安装kali后的简单配置
- C# 制作透明窗体
- Java中,&;&;与&;;||与|的区别
- 201521123087《Java程序设计》第12周学习总结
- Hadoop基础-Hadoop的集群管理之服役和退役
- /linux-command-line-bash-shortcut-keys/
- python模块:configparser
- iptables 代理转发配置
- 导出函数__declspec(dllexport)
- 1:4 UI标签和通用标签
- 解决 windows npm ERR! asyncWrite is not a function 问题
- python第二十五课——闭包
- Design2:使用HierarchyID构建数据的分层结构
- qsort的使用
- CentOS安装emacs24.2命令
- 超全面的JavaWeb笔记day15<;mysql数据库>;
热门文章
- Android TouchEvent事件传递机制
- jQuery - 设置内容和属性
- UserDefault的使用,保存小数据到本地-iOS
- Object-c 语言
- python--类方法、对象方法、静态方法
- 04-Java 异常
- http://stackoverflow.com/questions/12601907/loading-google-maps-in-anonymous-function
- nginx path_info问题解决
- android操作sdcard中的多媒体文件(一)——音乐列表的制作
- 正在调用的 ServicedComponent 配置不正确(请使用 regsvcs 重新注册)