自定义View制作简单的流式布局(搜索历史记录)
程序员文章站
2022-07-13 15:39:12
...
public class View3 extends ViewGroup {
private int hsize;
private int wsize;
private int childh;
private int childw;
public View3(Context context) {
super(context);
}
public View3(Context context, AttributeSet attrs) {
super(context, attrs);
}
public View3(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
measureChildren(widthMeasureSpec, heightMeasureSpec);
int top = 10;
int left = 10;
int hmode = MeasureSpec.getMode(heightMeasureSpec);
hsize = MeasureSpec.getSize(heightMeasureSpec);
wsize = MeasureSpec.getSize(widthMeasureSpec);
switch (hmode){
case MeasureSpec.AT_MOST:
//循环测量子View的宽高
for (int i=0;i<getChildCount();i++){
childw = getChildAt(i).getMeasuredWidth();
childh = getChildAt(i).getMeasuredHeight();
//如果左边距+View宽+右边距>View宽
if (left + childw+10>wsize){
top +=(childh+10);
left=10;
}
left+=(childw+10);
}
//累计最后一行
top +=(childh+10);
break;
}
setMeasuredDimension(wsize,top);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
int left=10;
int top=10;
for (int i=0;i<getChildCount();i++){
childw = getChildAt(i).getMeasuredWidth();
childh = getChildAt(i).getMeasuredHeight();
if (left + childw+10>wsize){
top +=(childh+10);
left=10;
getChildAt(i).layout(left,top,left+childw,top+childh);
}else{
getChildAt(i).layout(left,top,left+childw,top+childh);
}
left+=(childw+10);
}
}
//添加事件点击事件
@Override
public boolean onTouchEvent(MotionEvent event) {
return super.onTouchEvent(event);
}
}
上一篇: 自定义view