自定义view仿bilibili的自适应tag


@Override

protected voidonMeasure(intwidthMeasureSpec,intheightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    intchildCount = getChildCount();
    intsizeWidth = MeasureSpec.getSize(widthMeasureSpec);
    floatleft =0.0f,right=0.0f,top=0.0f,bottom=0.0f; 
    intlines = sizeWidth;
    View view;
    intchildWidth;
    intlineItems =0;
    Position position ;
    for(inti=0; i < childCount  ; i++){
          view = getChildAt(i);
          measureChild(view,widthMeasureSpec,heightMeasureSpec);
          childWidth = view.getMeasuredWidth() ;
          if(lines - childWidth  >=mPadding){
                if(right ==0){
                    lines -= childWidth;
                    right =1;
                }else{
                    lines -= (childWidth +mPadding);
                }
                lineItems ++;
                if(i == childCount-1){
                    right =0;
                    for(intj = i - lineItems +1;j <= i;j++){
                          if(right ==0){
                              left = right;
                          }else{
                          left = right +mPadding;
                    }
                    right = left + getChildAt(j).getMeasuredWidth();
                    bottom = top + getChildAt(j).getMeasuredHeight();
                    position =newPosition(left,top,right,bottom);
                    getChildAt(j).setPadding(10,5,10,5);
                    getChildAt(j).setTag(position);
                }
            }
      }else{
            right =0;
            floatlinesPadding = lines / (2* lineItems);
            for(intj = i - lineItems; j < i ;j++){
                  if(right ==0){
                  left = right;
            }else{
                  left = right +mPadding;
            }
            right = left + getChildAt(j).getMeasuredWidth() +2* linesPadding;
            bottom = top + getChildAt(j).getMeasuredHeight();
            position =newPosition(left,top,right,bottom);
            getChildAt(j).setPadding((int)linesPadding,5,(int)linesPadding,5);
            getChildAt(j).setTag(position);
            }
            lines = sizeWidth;
            right =0;
            top = bottom +10;
            lineItems =0;
            i--;
           }  
      }
     setMeasuredDimension(sizeWidth, (int) bottom);
} 

你可能感兴趣的:(自定义view仿bilibili的自适应tag)