重写View的onMeasure方法

来源:互联网 发布:java开发架构设计 编辑:程序博客网 时间:2024/06/06 11:37
  1. @Override  
  2.     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {  
  3.         // TODO Auto-generated method stub  
  4.         super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
  5.         int width = measureDimension(200, widthMeasureSpec);  
  6.         int height = measureDimension(200, heightMeasureSpec);  
  7.         setMeasuredDimension(width, height);  
  8.     }  
  9.   
  10.     public int measureDimension(int defaultSize, int measureSpec){  
  11.         int result;  
  12.           
  13.         int specMode = MeasureSpec.getMode(measureSpec);  
  14.         int specSize = MeasureSpec.getSize(measureSpec);  
  15.           
  16.         if(specMode == MeasureSpec.EXACTLY){  
  17.             result = specSize;  
  18.         }else{  
  19.             result = defaultSize;   //UNSPECIFIED  
  20.             if(specMode == MeasureSpec.AT_MOST){  
  21.                 result = Math.min(result, specSize);  
  22.             }  
  23.         }  
  24.         return result;  
  25.     }  





MeasureSpec.getMode()方法返回的结果有三种:

  • UNSPECIFIED:父对子的大小没有任何要求。
  • EXACTLY:  父要求其子的大小指定为某个确切的值。其子以及其他子孙都需要适应该大小。   
  • AT MOST:父要求其子的大小不能超过某个最大值,其子以及其他子孙的大小都需要小于这个值


0 0
原创粉丝点击