androidtag标签效果
来源:互联网 发布:淘宝特卖2016女装 编辑:程序博客网 时间:2024/05/16 11:31
TagFlowLayout类
public class TagFlowLayout : ViewGroup { private int mLineSpacing=16; private int mTagSpacing=16; private BaseAdapter mAdapter; private Android.Database.DataSetObserver mObserver; public TagFlowLayout (Context context):base(context){ } public TagFlowLayout(Context context, IAttributeSet attrs):base(context,attrs){ } public TagFlowLayout(Context context, IAttributeSet attrs, int defStyle):base(context,attrs,defStyle) { } public void drawLayout() { if (mAdapter == null || mAdapter.Count == 0) { return; } this.RemoveAllViews (); for (int i = 0; i < mAdapter.Count; i++) { View view = mAdapter.GetView(i,null,null); int position = i; this.AddView(view); } } protected override void OnMeasure (int widthMeasureSpec, int heightMeasureSpec) { //base.OnMeasure (widthMeasureSpec, heightMeasureSpec); int wantHeight = 0; int wantWidth=View.ResolveSize(0,widthMeasureSpec); int paddingLeft = this.PaddingLeft; int paddingRight = this.PaddingRight; int paddingTop = this.PaddingTop; int paddingBottom = this.PaddingBottom; int childLeft = paddingLeft; int childTop = paddingTop; int lineHeight = 0; for (int i = 0; i <this.ChildCount; i++) { View childView=this.GetChildAt(i); if (childView.Visibility == ViewStates.Gone) { continue; } LayoutParams paramss = childView.LayoutParameters; childView.Measure(GetChildMeasureSpec(widthMeasureSpec, paddingLeft + paddingRight, paramss.Width),GetChildMeasureSpec(heightMeasureSpec, paddingTop + paddingBottom, paramss.Height) ); int childHeight = childView.Height; int childWidth = childView.Width; lineHeight = Math.Max(childHeight, lineHeight); if (childLeft + childWidth + paddingRight > wantWidth) { childLeft = paddingLeft; childTop += mLineSpacing + childHeight; lineHeight = childHeight; } else { childLeft += childWidth + mTagSpacing; } } wantHeight = childTop + lineHeight + paddingBottom; SetMeasuredDimension (wantWidth, ResolveSize (wantHeight, heightMeasureSpec)); } protected override void OnLayout (bool changed, int l, int t, int r, int b) { int width = r - l; int paddingLeft = this.PaddingLeft; int paddingTop = this.PaddingTop; int paddingRight = this.PaddingRight; int childLeft = paddingLeft; int childTop = paddingTop; int lineHeight = 0; for (int i = 0, childCount = ChildCount; i < childCount; ++i) { View childView =GetChildAt(i); if (childView.Visibility == ViewStates.Gone) { continue; } int childWidth = childView.MeasuredWidth; int childHeight = childView.MeasuredHeight; lineHeight = Math.Max(childHeight, lineHeight); if (childLeft + childWidth + paddingRight > width) { childLeft = paddingLeft; childTop += mLineSpacing + lineHeight; lineHeight = childHeight; } childView.Layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight); childLeft += childWidth + mTagSpacing; } } protected override void OnDraw (Android.Graphics.Canvas canvas) { base.OnDraw (canvas); } protected override LayoutParams GenerateDefaultLayoutParams () { return base.GenerateDefaultLayoutParams (); } public void setAdapter(BaseAdapter adapter){ if (mAdapter == null) { mAdapter = adapter; if (mObserver == null) { mObserver = new DataChangeObserver(this); mAdapter.RegisterDataSetObserver(mObserver); } drawLayout(); } } }
DataChangeObserver类
class DataChangeObserver:Android.Database.DataSetObserver{ TagFlowLayout tagflowlayout; public DataChangeObserver(TagFlowLayout tagflowlayout) { this.tagflowlayout = tagflowlayout; } public override void OnChanged () { base.OnChanged (); tagflowlayout.drawLayout (); } public override void OnInvalidated () { base.OnInvalidated (); } }
TagBaseAdapter类
public class TagBaseAdapter : BaseAdapter { private Context mContext; private List<String> mList; public TagBaseAdapter(Context context, List<String> list) { this.mContext = context; this.mList = list; } public override int Count { get { return mList.Count; } } public override Java.Lang.Object GetItem (int position) { return mList [position]; } public override long GetItemId (int position) { return position; } public override View GetView (int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.From (mContext).Inflate (Resource.Layout.tagView, null); holder = new ViewHolder (); holder.tagBtn = (Button)convertView.FindViewById (Resource.Id.tag_btn); convertView.Tag = holder; } else { holder = (ViewHolder)convertView.Tag; } String text = mList[position]; holder.tagBtn.Text = text; return convertView; } }
Viewholder类
class ViewHolder:Java.Lang.Object { public Button tagBtn; }
界面
<RelativeLayout android:minWidth="25px" android:minHeight="25px" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/relativeLayout1"> <com.ixiaomang.TagFlowLayout android:id="@+id/container" android:layout_width="match_parent" android:paddingTop="5dp" android:paddingBottom="5dp" android:layout_height="wrap_content" /> </RelativeLayout>
mainactivity中主要代码
List<string> taglist= new List<string> (){"可爱","大懒虫","很认证","二货","超级有责任心","呆萌+2" }; mContainer = (TagFlowLayout) FindViewById(Resource.Id.container); mAdapter = new TagBaseAdapter(this,taglist); mContainer.setAdapter(mAdapter))`
0 0
- androidtag标签效果
- Ajax标签导航效果
- JS实现标签效果
- TAB标签效果
- 标签切换效果
- 标签页效果
- 网页效果标签云
- listview 穿插标签效果
- js-tab标签效果
- 文件标签分割效果
- dojo标签淡出效果
- 【JQuery】标签页效果
- 搜索标签效果
- 仿微信添加标签效果
- 仿微信添加标签效果
- css3 a标签效果
- CSS3动画效果标签
- 仿微信添加标签效果
- PostgreSQL学习手册(PL/pgSQL过程语言)
- jxls操作excel文件
- 51单片机——中断
- Android中轻松使用线程
- ConcurrentHashMap之实现细节
- androidtag标签效果
- C# in Depth
- 周期数据分盘展示(有,点、折线、贝赛尔曲线)
- iOS 保持界面流畅的技巧
- 初步了解RPM ,DPKG ,YUM ,APT-GET
- c++将string类型的数据转化为char类型的数
- Android EditText 校验手机号
- Vim简明教程【CoolShell】
- Android binder : 参考图