Android向上滑动隐藏Header头部动画
2016-09-13 14:01:26  By: dwtedx

Android中、大家都用过ListView、ExpandableListView等、也许你还用过 PinnedHeaderListView、但是如果我说PinnedHeaderExpandableListView、你听过吗?还有可下拉的PinnedHeaderExpandableListView呢?没听过也不要紧、本文就是介绍这个东西的、为了让大家有更直观的了解、先上效果图

通过效果图可以看出、首先它是一个ExpandableListView、但是它的头部可以固定、其次、在它的上面还有一个头部可以来回伸缩、恩、这就是本 文要介绍的自定义view、为了提高复用性、这个效果我分成来了2个view来实现、第一个是 PinnedHeaderExpandableListView来实现头部固定的ExpandableListView、第二个view是 StickyLayout、这个view具有一个可以上下滑动的头部、最后将这2个view组合在一起、就达到了如下的效果

android滑动隐藏头部


dispatchTouchEvent代码

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    int x = (int) ev.getX();
    int y = (int) ev.getY();
    int pos = pointToPosition(x, y);
    if (mHeaderView != null && y >= mHeaderView.getTop() && y <= mHeaderView.getBottom()) {
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            mTouchTarget = getTouchTarget(mHeaderView, x, y);
            mActionDownHappened = true;
        } else if (ev.getAction() == MotionEvent.ACTION_UP) {
            View touchTarget = getTouchTarget(mHeaderView, x, y);
            if (touchTarget == mTouchTarget && mTouchTarget.isClickable()) {
                mTouchTarget.performClick();
                invalidate(new Rect(0, 0, mHeaderWidth, mHeaderHeight));
            } else if (mIsHeaderGroupClickable){
                int groupPosition = getPackedPositionGroup(getExpandableListPosition(pos));
                if (groupPosition != INVALID_POSITION && mActionDownHappened) {
                    if (isGroupExpanded(groupPosition)) {
                        collapseGroup(groupPosition);
                    } else {
                        expandGroup(groupPosition);
                    }
                }
            }
            mActionDownHappened = false;
        }
        return true;
    }

    return super.dispatchTouchEvent(ev);
}


setOnHeaderUpdateListener代码

public void setOnHeaderUpdateListener(OnHeaderUpdateListener listener) {
    mHeaderUpdateListener = listener;
    if (listener == null) {
        mHeaderView = null;
        mHeaderWidth = mHeaderHeight = 0;
        return;
    }
    mHeaderView = listener.getPinnedHeader();
    int firstVisiblePos = getFirstVisiblePosition();
    int firstVisibleGroupPos = getPackedPositionGroup(getExpandableListPosition(firstVisiblePos));
    listener.updatePinnedHeader(mHeaderView, firstVisibleGroupPos);
    requestLayout();
    postInvalidate();
}


android滑动隐藏头部源代码下载链接: android 上滑隐藏头部 密码: jcpx

若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力

想获取DD博客最新代码、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)

或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)

如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教

为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)

感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛


快速评论


技术评论

  • 该技术还没有评论、赶快抢沙发吧...
DD记账
top
+