傲娇Android二三事之诡诡异异的图片加载
话说春天就像装B人的脸,一会儿晴来一会儿雨。昨儿还是雨天,今天就放晴了。迎面阵阵微风吹来,听着阿牛哥的桃花朵朵开,不禁想起了某南宋文艺高富帅的约炮口号:"腰缠十万贯,骑鹤下扬州"。想到这贫道一阵鄙视,“当自己是种人吗,要泡遍整个扬州城?”再翻翻自己的皮夹子,虽然只有10元钱骑鹤去扬州是不行了,但是骑车吃碗白粥还是可以的。正当贫道起身准备进膳时,长相猥琐,貌比如花的QA大叔,唱着上学歌,一路蹦了过来。如果说上次那个图片在屏幕不同位置,图片尺寸不同是个奇迹,那么这次的就是个灵异事件了。在贫道测试平板上显示正常的图片(见图1),在Qa的平板上只显示了图片的中间部分(见图2)。此刻贫道突然有一种下一刻,贞子MM会从屏幕里爬出来的感觉。为了能检测到问题所在,贫道冒着贞子MM会爬出来的危险,强行把Qa的平板扣留了下来。
图1 图2
贫道迅速写了个测试代码,由于ImageView的大小是200x200像素,所设的图片也是200x200像素,正确的话应该是图能正好完全显示。
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity" ><ImageViewandroid:id="@+id/img"android:layout_width="200px"android:layout_height="200px"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:scaleType="center"/></RelativeLayout>
MainActivity.java
package com.example.testimg;import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.widget.ImageView;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView imv = (ImageView)this.findViewById(R.id.img); imv.setImageResource(R.drawable.emp);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu);return true;}}
测试程序在贫道的平板上还是没有问题,然后又在Qa的平板上运行了一下。这个每篇必出现的"但是"君,又是如约而至。图片真的只显示了一部分。贫道看了看自己的杂牌平板,又看了看Qa高贵冷艳的Nexus 7,难道Android也搞品牌歧视。高贵的看不上杂牌的?不是Android所在的希望国号称人人平等吗?看来平等不平等,只有贫道亲自去看一看了,当然希望国是去不了的,但调试到程序里看看还是可以的。
既然是图片显示不完整,说明ImageView控件或者加载图片的大小出了问题,所以贫道添加了获取ImageView和图片大小的代码。
MainActivity.java
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ImageView imv = (ImageView)this.findViewById(R.id.img);int w1 = imv.getWidth();int h1 = imv.getHeight();Bitmap img = BitmapFactory.decodeResource(this.getResources(),R.drawable.emp);int w2 = img.getWidth();int h2 = img.getHeight();imv.setImageBitmap(img);}
按下调试按钮后,只见图片的Width和Height都变成了266,而不是图片本身的大小(见图3)。希望国名为平等,实乃霸权的丑恶嘴脸再一次显现无疑。此时的天空又下起了阵阵细雨,仿佛是傻大木,卡上校内牛满面的泪水。
图3
是继续揭露其伪平等的黑幕吗?想到武装到牙齿的王师,贫道不禁打了个冷战,想可耻的匿了。就在这时太祖那抑扬顿挫的声音在贫道脑海中响起:"美帝国主义都是纸老虎"。远处天雷滚滚,而此时的贫道心中一种使命感油然而生,心中顿时出现了希曼那伟岸的身影,不禁间手握窗边的避雷针高喊道:"春哥,赐予我力量吧。"刹那间贫道浑身上下牛B闪闪,是在渡劫飞升吗?答案自然是否定的,只不过是电流经过人肉电阻产生的发热发光的自然现象。与此同时,一张写着篆字的黄色字条,缓缓飘落,只见上面写着:"安卓不决问谷歌,解铃还须系铃人。"
看到这,贫道不禁想起了,几天前参加了一个Google赞助的水陆大法会,会上碰巧一位道友在宣讲了一个关于Android UI布局的法事。在宣讲的过程中,很神奇的演示了下在不同分辨率下,界面的布局做到了一致性,没有因为分辨率的变化而导致控件大小和位置显示不同。待贫道想问个究竟时,此道友却洒下一大把所谓的讲义,然后得道飞升了。在一片众人羡慕的眼光中,贫道一阵黑线,难道开发Android也能攒飞升经验值。望着满天飞舞的讲义,贫道伸手抓了一张,只见在擦屁股都嫌硬的纸上,用老军医体歪歪扭扭的印着几个google专有网址。贫道很不屑的塞到了包里,就当草稿纸了。
拿出那张已经皱巴巴的讲义,点开了其中的一个链接。只见上面写道,Android为了能让程序适应不同平板的分辨率,以dpi为标准将平板分成了四个档次。dpi者,屏幕密度也。一英寸160个像素被称为中密度屏幕,也称基准密度屏幕(mdpi),低于此标准的为ldpi,高于此标准的为hdpi,再高的就为xhdpi。与此同时在res目录下生成了四个对等的目录(drawable-hdp,drawable-ldpi,drawable-mdpi,drawable-xhdpi)标准如下:
xhdpi:~320dpi
hdpi: ~240dpi
mdpi:~160dpi
ldpi:~120dpi
此时贫道恍然大悟,原来贫道的平板是中密度屏幕属于发展中国家水平,而QA的Nexus 7已经是高密度屏幕, 已达到发达国家水平。看来号称人类希望的米国,不仅不平等,还嫌贫爱富,为富不仁啊。 更令人发指的是,程序就是根据dpi从不同的目录里寻找相关的资源,如果在本目录里寻找不到,就会到其他的目录里寻找。找到后,并不是按照原来的大小载入图片,而是根据当前屏幕dpi/找到图片的目录所对应的dpi来确定图片的大小。以本文为例,Nexus 7的dpi为208dpi属于hdpi,如果图片只放在了drawable-mdpi中而没有放到drawable-hdpi里。这样当程序运行在Nexus 7上时,图片的width和height就为原图片的208/160倍,也就是1.3倍左右。贫道检查了下测试程序,果然只在drawable-mdpi目录里存放了图片,而在drawable-hdpi里没有存放,这就是造成为啥图片的width和height是266px的原因,因为被放大了1.3倍。
看到这贫道心中一片悲凉,原来在Android的世界中,高端人士也是拿着屌丝们的资源任意操作,造成系数膨胀,导致灾难的发生。贫道不禁仰天长叹,一生为之奋斗的清平世界何时才能重返人间。此时的贫道陷入了深深的沉思中。
<<上一篇: 傲娇Android二三事之古古怪怪的Margin
转载于:https://www.cnblogs.com/andreitang/archive/2013/04/08/Display_image.html
傲娇Android二三事之诡诡异异的图片加载相关推荐
- 傲娇Android二三事之古古怪怪的Margin
在一个淅淅沥沥的下午,贫道一边品着窖藏了七天的桶装水,一边尝着牙缝里剔出来的肉丝,估计食堂师傅是以吃盐为生的,两三个小时了,还有着一股淡淡的咸味.看着窗外,三三两两的情侣打着伞在雨中漫步.贫道不禁想到 ...
- android 开发中常用的第三方库(图片加载篇)
今天我们来学习其中一个Android主流的图片加载库的使用 - Picasso 目录 目录 1. 简介 介绍:Picasso,可译为"毕加索",是Android中一个图片加载开源库 ...
- 傲娇Android二三事之操蛋的开发日记(第一回)
武宗元年 十一月初四 霾 今日魔都,依旧仙雾环绕,仿佛蓬莱落凡尘.望着470这个鲜红的AQI修仙指数,贫道不禁吟道,"正是修仙好光景,雾霾时节又逢君".但在这个只修bug,不修仙的 ...
- Android高效异步图片加载框架
概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ...
- Android图片加载到底哪家强
图片加载几乎是任何 Android 项目中必备的需求,而图片加载的开源库也越来越多,我们姑且在 GitHub 上搜索下 android image 关键字,出来的前五个按照 Star 数排序的项目如下 ...
- Android图片加载库的封装实战
重磅更新 2017-02-16 2017-05-09 优化圆形图片加载 更新demo 前言 主流图片加载库的对比 Android-Universal-Image-Loader Picasso Glid ...
- Android Glide图片加载框架(二)源码解析之into()
文章目录 一.前言 二.源码解析 1.into(ImageView) 2.GlideContext.buildImageViewTarget() 3.RequestBuilder.into(Targe ...
- Android Glide图片加载框架(二)源码解析之load()
文章目录 一.前言 二.源码分析 1.load() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图片加载框架(二)源 ...
- Android Glide图片加载框架(二)源码解析之with()
文章目录 一.前言 二.如何阅读源码 三.源码解析 1.with() Android Glide图片加载框架系列文章 Android Glide图片加载框架(一)基本用法 Android Glide图 ...
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53939176 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...
最新文章
- java学习一 path与classpath
- python调包侠_拒绝调包侠,不需要高级算法和数据结构技巧
- 腾讯qq在线状态,开放平台
- cobertura覆盖率_Cobertura和Maven:集成和单元测试的代码覆盖率
- jQuery 简单案例
- 博士当中学老师是“人才浪费”?
- 用 lastIndexOf()、substr()、split()方法截取一段字符串
- html5语音读取文字_文字识别神器最新版-文字识别神器安卓版下载
- Elasticsearch6.x和Kibana6.x的安装
- 3. DICOM图像层级分类-DCMTK-数据字典避坑
- Xshell使用教程——问答方式
- 阿里菜鸟java岗面试
- 麦本本笔记本怎么U盘重装Win10系统教学?
- 什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!
- 随手写了一个鸡肋的二叉树
- JavaWeb-16 (E家园项目案例1)
- 半方差(semi-variogram)分析的原理和应用
- 单片机智能小区安防系统
- 网站推广工具易推宝是什么?
- 适用于linux的解压工具,Linux下的压缩/解压缩工具
热门文章
- BiLSTM+CRF命名实体识别:达观杯败走记(下篇)
- 百面机器学习——svm基尼系数寻找最优划分
- Python—常用正则表达式方法
- bug1-tensorflow中自定义模型的bug-input_signature
- 李宏毅自然语言处理——成分句法分析
- 书单|互联网企业面试案头书之程序员技术篇
- 25 矩阵——QR分解、Householder 矩阵、镜面反射
- C语言Register关键字:利用寄存器提升访问效率
- java 计算器 junit测试_测试工具之JUnit4 结合Mockito模拟测试代码
- linux下c 上传图片到mysql_Linux下C连接MySql数据库