自定义ViewGroup实现流式布局
来源:互联网 发布:彩虹6号 淘宝 编辑:程序博客网 时间:2024/05/04 04:26
package com.example.test;import android.content.Context;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;public class FlowLayout extends ViewGroup {private int lineSpacing = 20;public FlowLayout(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);int paddingLeft = getPaddingLeft();int paddingRight = getPaddingRight();int paddingTop = getPaddingTop();int paddingBottom = getPaddingBottom();int widthUsed = paddingLeft + paddingRight;int heightUsed = paddingTop + paddingBottom;int childMaxHeightOfThisLine = 0;int childCount = getChildCount();for (int i = 0; i < childCount; i++) {View child = getChildAt(i);if (child.getVisibility() != GONE) {int childUsedWidth = 0;int childUsedHeight = 0;measureChild(child, widthMeasureSpec, heightMeasureSpec);childUsedWidth += child.getMeasuredWidth();childUsedHeight += child.getMeasuredHeight();FlowLayoutParams params = (FlowLayoutParams) child.getLayoutParams();childUsedWidth += params.leftMargin + params.rightMargin;childUsedHeight += params.topMargin + params.bottomMargin;if (widthUsed + childUsedWidth < widthSpecSize) {widthUsed += childUsedWidth;if (childUsedHeight > childMaxHeightOfThisLine) {childMaxHeightOfThisLine = childUsedHeight;}} else {heightUsed += childMaxHeightOfThisLine + lineSpacing;widthUsed = paddingLeft + paddingRight + childUsedWidth;childMaxHeightOfThisLine = childUsedHeight;}}}heightUsed += childMaxHeightOfThisLine;setMeasuredDimension(widthSpecSize, heightUsed);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {int paddingLeft = getPaddingLeft();int paddingRight = getPaddingRight();int paddingTop = getPaddingTop();int childStartLayoutX = paddingLeft;int childStartLayoutY = paddingTop;int widthUsed = paddingLeft + paddingRight;int childMaxHeight = 0;int childCount = getChildCount();for (int i = 0; i < childCount; i++) {View child = getChildAt(i);if (child.getVisibility() != GONE) {int childNeededWidth, childNeedHeight;int left, top, right, bottom;int childMeasuredWidth = child.getMeasuredWidth();int childMeasuredHeight = child.getMeasuredHeight();FlowLayoutParams params = (FlowLayoutParams) child.getLayoutParams();int childLeftMargin = params.leftMargin;int childTopMargin = params.topMargin;int childRightMargin = params.rightMargin;int childBottomMargin = params.bottomMargin;childNeededWidth = childLeftMargin + childRightMargin+ childMeasuredWidth;childNeedHeight = childTopMargin + childBottomMargin+ childMeasuredHeight;if (widthUsed + childNeededWidth <= r - l) {if (childNeedHeight > childMaxHeight) {childMaxHeight = childNeedHeight;}} else {childStartLayoutY += childMaxHeight + lineSpacing;childStartLayoutX = paddingLeft;childMaxHeight = childNeedHeight;widthUsed = paddingLeft + paddingRight;}left = childStartLayoutX + childLeftMargin;top = childStartLayoutY + childTopMargin;right = left + childMeasuredWidth;bottom = top + childMeasuredHeight;widthUsed += childNeededWidth;childStartLayoutX += childNeededWidth;child.layout(left, top, right, bottom);}}}@Overrideprotected LayoutParams generateLayoutParams(LayoutParams p) {return new FlowLayoutParams(p);}@Overridepublic LayoutParams generateLayoutParams(AttributeSet attrs) {return new FlowLayoutParams(getContext(), attrs);}private class FlowLayoutParams extends MarginLayoutParams {public FlowLayoutParams(int arg0, int arg1) {super(arg0, arg1);}public FlowLayoutParams(LayoutParams arg0) {super(arg0);}public FlowLayoutParams(MarginLayoutParams arg0) {super(arg0);}public FlowLayoutParams(Context arg0, AttributeSet arg1) {super(arg0, arg1);}}}
阅读全文
0 0
- 自定义ViewGroup实现流式布局FlowLayout
- Android 自定义ViewGroup 实现流式布局
- Android自定义ViewGroup实现流式布局
- 自定义ViewGroup实现流式布局
- 自定义ViewGroup实现流式布局
- 自定义viewGroup 实现 流式布局
- 自定义ViewGroup实现流式布局
- 自定义viewgroup流式布局
- android 自定义ViewGroup实现流式布局过程
- android 自定义控件--用viewGroup实现流式布局
- 自定义ViewGroup(3):自定义流式布局
- 自定义ViewGroup,流式布局FlowLayout
- Android自定义ViewGroup实战-----流式布局
- Android自定义viewgroup实现自定义布局
- 自定义ViewGroup之流式布局
- 自定义ViewGroup实现流式布局(支持ViewGroup Padding, 子View margin,每行高度可以不一样)
- Android自定义ViewGroup之流式布局的实现
- 自定义ViewGroup容器,实现自动换行的流式布局的效果
- golang学习之negroni/gizp源码分析
- windows安装mysql-5.7压缩版详细教程
- 二维数组输出
- windows下配置nginx+php环境
- js以逗号分隔的字符串怎么转化为数组
- 自定义ViewGroup实现流式布局
- JS图片预加载
- poi导出exce表实例
- python基础-yield与装饰器、yield并发切换(非io)、greenlet实现切换(非io)
- Python 小技巧:快速生成初始化二维数组
- 虚拟机 VMware Workstation 安装的windows系统不能 联网
- 【快哥评测】孩子守护神——智能猫眼实际价值
- Linux系统管理用户
- HDOJ 1020 Encoding