@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
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 「博客搬家」 原地址: CSDN 原发表时间: 2016-10-12 本文主要总结使用 C# 及 .NET 在...