• 前奏
    • 现象
    • WHY
    • 结论

前奏

progressbar在xml的写法是:

<ProgressBar  android:id="@+id/progressBar1" style="?android:attr/progressBarStyleHorizontal" android:layout_width="133.3dp" android:layout_height="42.4dp" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:minHeight="42.4dp" android:minWidth="133.3dp" android:progressDrawable="@drawable/networkdata_down_book_progress_selector" />

networkdata_down_book_progress_selector的xml文件是:

<?xml version="1.0" encoding="utf-8"?><layer-list xmlns:android="http://schemas.android.com/apk/res/android" >    <item android:id="@android:id/background" android:drawable="@drawable/networkdata_btn_normal"></item>    <item android:id="@android:id/progress" android:drawable="@drawable/networkdata_btn_press"></item></layer-list>

现象

将图片networkdata_btn_normal和networkdata_btn_press放在drawable-mdpi,现象是

而把图片放在drawable-xhdpi,现象是

最终把图放在drawable-nodpi里,现象是

WHY?

progressbar的android:progressDrawable属性是绘制draw图片,只有图的大小和progressbar大小一样才会正常显示,不然要么图片被截取显示,要么拉伸显示。

结论

我用的机器屏幕密度是1.65,也就是264dpi。而mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi,所以在drawable-mdpi和drawable-hdpi里,图片只显示一部分 ,在drawabe-xhdpi里会拉伸显示。 把图放在drawable-mdpi里,图会变成原来的宽高(264/160),也就是放大了1.65倍,而progressbar设定宽高,那么就会从放大后的图里,以左上角为原点,截取progressbar的宽高大小的图,hdpi同理是放大,所以显示不全;而在xhdpi里,图会变成原来的宽高(264/320),也就是缩小了0.825倍,那么要取progressbar的大小,也就需要填充,所以绘制第二张图来填满progressbar。把图放在drawable-nodpi,那么只会获取原图的大小,所以只要把progressbar的大小设为和图的大小一样就可以了。

PS:图片放在不同的资源文件夹里也会造成内存消耗不同,感兴趣的朋友可以参考: 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

欢迎回复讨论!

更多相关文章

  1. Android手势滑动实现ImageView缩放图片大小
  2. android圆形ImageView之CircleImageView
  3. Android(安卓)WebView通过代码修改网页的字体大小
  4. Android(安卓)使用aab 发布
  5. Android选择本地图片并裁剪工具类
  6. android中 关于listitem 获得焦点时,改变其背景
  7. android学习笔记4:图片显示imageVIew
  8. 实现如何Android(安卓)获得图片的总结
  9. Android滑动列表加载大量图片时候的优化

随机推荐

  1. 上官网学android之七(Saving Data)
  2. 内容提供者的基本知识
  3. Android使用FileObserver对sdcard文件或
  4. Android快速开发框架dyh详解(六)---工具
  5. ant debug 出现的错误:build.xml:49 taskd
  6. Android(安卓)解析如何获取SDCard 内存
  7. Android(安卓)之 Fresco 显示圆形图片 之
  8. Android(安卓)广播事件机制
  9. Android(安卓)Service简介
  10. Android(安卓)测试工具------ monkeyrunn