解析:继承ViewGroup后的子类如何重写onMeasure方法

 更新时间:2013年06月15日 10:48:53   作者:  
本篇文章是对继承ViewGroup后的子类如何重写onMeasure方法进行了详细的分析介绍,需要的朋友参考下
1.首先贴上我试验成功的代码
复制代码 代码如下:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

         int measureWidth = MeasureSpec.getSize(widthMeasureSpec);
         int measureHeigth = MeasureSpec.getSize(heightMeasureSpec);
         setMeasuredDimension(measureWidth, measureHeigth);
         // TODO Auto-generated method stub
         for(int i= 0;i<getChildCount();i++){
             View v = getChildAt(i);
             Log.v(TAG, "measureWidth is " +v.getMeasuredWidth() + "measureHeight is "+v.getMeasuredHeight());
             int widthSpec = 0;
             int heightSpec = 0;
             LayoutParams params = v.getLayoutParams();
             if(params.width > 0){
                 widthSpec = MeasureSpec.makeMeasureSpec(params.width, MeasureSpec.EXACTLY);
             }else if (params.width == -1) {
                 widthSpec = MeasureSpec.makeMeasureSpec(measureWidth, MeasureSpec.EXACTLY);
             } else if (params.width == -2) {
                 widthSpec = MeasureSpec.makeMeasureSpec(measureWidth, MeasureSpec.AT_MOST);
             }

             if(params.height > 0){
                 heightSpec = MeasureSpec.makeMeasureSpec(params.height, MeasureSpec.EXACTLY);
             }else if (params.height == -1) {
                 heightSpec = MeasureSpec.makeMeasureSpec(measureHeigth, MeasureSpec.EXACTLY);
             } else if (params.height == -2) {
                 heightSpec = MeasureSpec.makeMeasureSpec(measureWidth, MeasureSpec.AT_MOST);
             }
             v.measure(widthSpec, heightSpec);

         }
     }

解释一下:
首先判断params.width的值是多少,有三种情况。
如果是大于零的话,及传递的就是一个具体的值,那么,构造MeasupreSpec的时候可以直接用EXACTLY。
如果为-1的话,就是MatchParent的情况,那么,获得父View的宽度,再用EXACTLY来构造MeasureSpec。
如果为-2的话,就是wrapContent的情况,那么,构造MeasureSpec的话直接用一个负数就可以了。

相关文章

  • Android开发之文件操作模式深入理解

    Android开发之文件操作模式深入理解

    本文将介绍Android开发之文件操作模式,需要了解的朋友可以参考下
    2012-12-12
  • 10种提升android运行效率的建议

    10种提升android运行效率的建议

    这篇文章主要分享提升android运行效率的建议,如何让安卓程序在有限的内存和电池资源下流畅快速有效率的运行,下面给大家分享下面给出了10种实践中的建议,需要的朋友可以参考一下
    2021-11-11
  • Android开发笔记之:Dialog的使用详解

    Android开发笔记之:Dialog的使用详解

    本篇文章是对Android中Dialog的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Android自定义橡皮擦效果

    Android自定义橡皮擦效果

    这篇文章主要为大家详细介绍了Android自定义橡皮擦效果,橡皮擦擦图片,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android学习之AppWidget笔记分享

    Android学习之AppWidget笔记分享

    这篇文章主要为大家详细介绍了Android学习笔记之AppWidget的相关资料,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android线程的优先级设置方法技巧

    Android线程的优先级设置方法技巧

    对于Android平台上的线程优先级设置来说可以处理很多并发线程的阻塞问题,比如很多无关紧要的线程会占用大量的CPU时间,虽然通过了MultiThread来解决慢速I/O但是合理分配优先级对于并发编程来说十分重要
    2016-02-02
  • Android模拟实现网易新闻客户端

    Android模拟实现网易新闻客户端

    这篇文章主要为大家详细介绍了Android模拟实现网易新闻客户端,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Android Studio项目中导入开源库的方法

    Android Studio项目中导入开源库的方法

    这篇文章主要介绍了Android Studio项目中导入开源库的方法,即使用第三方库、第三广场框架的方法,需要的朋友可以参考下
    2015-06-06
  • Android仿微信二维码和条形码

    Android仿微信二维码和条形码

    这篇文章主要介绍了Android仿微信二维码生成以及条形码生成具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • android 使用虚拟机安装apk(图文教程)

    android 使用虚拟机安装apk(图文教程)

    android 使用虚拟机安装apk对一些新手朋友会很陌生,今天教大家使用使用虚拟机安装apk文件,步骤很详细,有需要的朋友可以参考下
    2012-12-12

最新评论