自定义挤压头部的listview
来源:互联网 发布:常州seo 编辑:程序博客网 时间:2024/06/10 19:47
package com.handcar.view;import android.content.Context;import android.graphics.Canvas;import android.util.AttributeSet;import android.view.View;import android.widget.ListAdapter;import android.widget.ListView;/** * 自定义挤压头部的listview * * @author blue * */public class PinnedHeaderListView extends ListView{public interface PinnedHeaderAdapter{public static final int PINNED_HEADER_GONE = 0;public static final int PINNED_HEADER_VISIBLE = 1;public static final int PINNED_HEADER_PUSHED_UP = 2;int getPinnedHeaderState(int position);void configurePinnedHeader(View header, int position, int alpha);}private static final int MAX_ALPHA = 255;private PinnedHeaderAdapter mAdapter;private View mHeaderView;private boolean mHeaderViewVisible;private int mHeaderViewWidth;private int mHeaderViewHeight;public PinnedHeaderListView(Context context){super(context);}public PinnedHeaderListView(Context context, AttributeSet attrs){super(context, attrs);}public PinnedHeaderListView(Context context, AttributeSet attrs, int defStyle){super(context, attrs, defStyle);}protected void onLayout(boolean changed, int left, int top, int right, int bottom){super.onLayout(changed, left, top, right, bottom);if (mHeaderView != null){mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);configureHeaderView(getFirstVisiblePosition());}}protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){super.onMeasure(widthMeasureSpec, heightMeasureSpec);if (mHeaderView != null){measureChild(mHeaderView, widthMeasureSpec, heightMeasureSpec);mHeaderViewWidth = mHeaderView.getMeasuredWidth();mHeaderViewHeight = mHeaderView.getMeasuredHeight();}}public void setPinnedHeaderView(View view){mHeaderView = view;if (mHeaderView != null){setFadingEdgeLength(0);}requestLayout();}public void setAdapter(ListAdapter adapter){super.setAdapter(adapter);mAdapter = (PinnedHeaderAdapter) adapter;}public void configureHeaderView(int position){if (mHeaderView == null){return;}int state = mAdapter.getPinnedHeaderState(position);switch (state){case PinnedHeaderAdapter.PINNED_HEADER_GONE:{mHeaderViewVisible = false;break;}case PinnedHeaderAdapter.PINNED_HEADER_VISIBLE:{mAdapter.configurePinnedHeader(mHeaderView, position, MAX_ALPHA);if (mHeaderView.getTop() != 0){mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight);}mHeaderViewVisible = true;break;}case PinnedHeaderAdapter.PINNED_HEADER_PUSHED_UP:{View firstView = getChildAt(0); if(firstView == null){ return; }int bottom = firstView.getBottom();int headerHeight = mHeaderView.getHeight();int y;int alpha;if (bottom < headerHeight){y = (bottom - headerHeight);alpha = MAX_ALPHA * (headerHeight + y) / headerHeight;} else{y = 0;alpha = MAX_ALPHA;}mAdapter.configurePinnedHeader(mHeaderView, position, alpha);if (mHeaderView.getTop() != y){mHeaderView.layout(0, y, mHeaderViewWidth, mHeaderViewHeight + y);}mHeaderViewVisible = true;break;}}}protected void dispatchDraw(Canvas canvas){super.dispatchDraw(canvas);if (mHeaderViewVisible){drawChild(canvas, mHeaderView, getDrawingTime());}}}
0 0
- 自定义挤压头部的listview
- 自定义ListView,头部视图悬停
- 自定义 头部可以缩放listview
- listview的分组挤压效果实现
- 自定义控件:overScrollBy+动画实现 ListView 的头部回弹抖动
- 自定义View之头部可伸缩的ListView
- android listView头部自定义标签形式
- Android自定义头部悬浮,快速索引ListView
- ListView 自定义头部、自定义加载尾部、上拉主动加载
- ListView 自定义头部、自定义加载尾部、上拉主动加载
- 自定义头部的下拉刷新
- ListView的头部视差效果的实现
- 头部下拉/底部上拉 自动刷新、自定义ListView组件
- 【Android学习】制作ListView的节头部
- listview头部显示不出来的问题
- Android ListView 头部缩小放大的效果
- Listview 头部悬停效果的实现
- 关于Edittext 弹出软键盘时 ListView背景被挤压的问题(已经解决)
- MFC中按钮的图片的变化,静态/hover/press,利用GDI
- 自己整理的OkHttp工具——留存用
- Bundle传数据
- [转]CocoaPods 详解之—-更新篇
- oracle 查询十分钟之前的数据
- 自定义挤压头部的listview
- list 获取应用icon
- Lodop 水印设置代码
- Android小经验
- 前端收藏夹
- 如何使用CSS3实现一个平滑的3D文本标题
- cocos2d-x Tiled地图坐标转换
- 像素翻转
- Unity AssetStore下载目录