• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 一个难倒 3年 android开发经验 " 工程师 " 的 "bug"

一个难倒 3年 android开发经验 " 工程师 " 的 "bug"

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了难倒大人的小学数学题,一个题目难倒13亿人,奥数题难倒网民,一分钱难倒英雄汉,小学题目难倒大学生等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一个难倒 3年 android开发经验 " 工程师 " 的 "bug"


  一个关于 imageView 设置 scaleType 的问题。

  就在刚才 晚上9 点多的时候,我的一个外包伙伴发一个工程代码我,叫我去看下这样一个"bug",说折腾了很久,图片选择器在选择完图片后,就要显示图片到界面上,大家可以想象下 微信 发表图片,因为我们相机的图片肯定是 长宽都不一致的,为了统一格式,一般都是把要显示出来的 imageView 设置成 scaleType = centerCrop 或者 center。

  问题就是:他在设置了上面的属性后,宛然无效!imageView 设置成 scaleType = centerCrop 或者 center,对图片没效果。

  先上事例图:

  理想效果 和 问题效果(左->右):

   \ \

  公用的 xml:

 1 <relativelayout 2="" 3="" 4="" 5="" 6="" 7="" 8="" 9="" 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" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".MainActivity">
10 
11     <linearlayout 12="" 13="" 14="" 15="" 16="" android:id="@+id/images_container" android:paddingleft="10dp" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content">
17         
18 
19 
20     </linearlayout>
21 
22 
23 </relativelayout>
</div> </div>

  我们来看看出问题的代码:

  imageView 的 xml:

1 <!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%2D%2D%3E-->
2 <imageview 3="" 4="" 5="" 6="" 7="" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/image_one" android:scaletype="centerCrop" android:layout_width="30dp" android:layout_height="30dp"></imageview>
</div> </div>

  他设置了动态 addView() 的方法 添加用户选中的 图片,java 代码,为了避免长篇大论,我已做简化,事例效果一样:

1 @Override
2     protected void onCreate(Bundle savedInstanceState) {
3         super.onCreate(savedInstanceState);
4         setContentView(R.layout.test);
5         final ImageView image = (ImageView) LayoutInflater.from(this).inflate(R.layout.send_post_image, null, false);
6         LinearLayout images_container = (LinearLayout) findViewById(R.id.images_container);
7         image.setImageResource(R.drawable.beni);
8         images_container.addView(image);
9     }
</div> </div>

     这样的代码,貌似没什么问题,通过 LayoutInflater.from(this).inflate(...) 来事例化一个 View,而最为之关键的是,这个View 就是上面的 imageView的xml,里面明确设置了 width 和 height 是 30dp,显示方式是 centerCrop,最后通过 addView 添加到一个 linearLayout 中。但是,这份代码显示出来的效果是 右图,非 理想效果!!哈哈,感觉恍然大悟吧。

  你可能会有这样一个印象,我们绝大多项目或者是练习中的 imageVIew 使用都是直接 findViewById, 一样的 imageView 设置,却没问题, 没错,的确没问题,你可以把上面的代码替换为这个试试:

   test.xml 换为:

 1 <relativelayout 2="" 3="" 4="" 5="" 6="" 7="" 8="" 9="" 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" android:paddingbottom="@dimen/activity_vertical_margin" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" tools:context=".MainActivity">
10 
11     <linearlayout 12="" 13="" 14="" 15="" 16="" android:id="@+id/images_container" android:paddingleft="10dp" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content">
17         <imageview 18="" 19="" 20="" 21="" android:id="@+id/image" android:scaletype="centerCrop" android:layout_width="30dp" android:layout_height="30dp">
22 
23 
24     </imageview></linearlayout>
25 
26 
27 </relativelayout>
</div> View Code</div>

  java 换为

1 @Override
2     protected void onCreate(Bundle savedInstanceState) {
3         super.onCreate(savedInstanceState);
4         setContentView(R.layout.test);
5         final ImageView image = (ImageView)findViewById(R.id.image);
6         image.setImageResource(R.drawable.beni);
7     }
</div> </div>

  这样显示出来的 效果 就是我们所 期望的。

   为什么通过 addView() 的方法却败了呢?

   问题的原因是这样的:任何使用 addView(...) 的方法,无论你所实例化的 View 本身的 xml 的 width 和 height 设置了什么,都是没效果的,请看清楚,是 width height 失效,上面的 scaleType 是有效的, 问题 java 代码中调用 addView 的时候并没有

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一个难倒 3年 android开发经验 &quot; 工程师 &quot; 的 &quot;bug&quot;

相关文章

  • 2017-05-26仿有道词典应用项目源码,有道词典项目源码
  • 2017-05-222.3.7 ProgressBar(进度条)
  • 2017-05-26安卓高级组件-----图像切换器,安卓-----切换器
  • 2017-05-26Android 连接webservice(利用谷歌提供的jar包),androidwebservice
  • 2017-05-26Activity与Service进行数据交互,activityservice
  • 2017-05-26浅谈Android Small插件化框架源码
  • 2017-05-26Android源码装饰模式---ContextWrapper
  • 2017-05-26android开发中fragment获取context,androidfragment
  • 2017-05-26仿拉手团购App9-- 产品详情界面,团购app9--
  • 2017-05-26高仿饿了么应用项目源码,高仿饿项目源码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 硅谷商城第二版6--购物车模块,6--购物车
    • Android View体系(六)从源码解析Activity的构成
    • Android MeasuerSpce的由来及使用
    • Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器,simplearrayadapter
    • Android音乐播放器源码(歌词.均衡器.收藏.qq5.0菜单.通知),android.qq5.0
    • Android中常见的图片加载框架,
    • udp connect 总结
    • 详细解读DialogFragment,解读dialogfragment
    • 硅谷社交14--选择联系人页面,硅谷社交14--联系人
    • ARM汇编中LDR伪指令和LDR指令

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有