頭部固定可伸縮的ExpandableListView:PinnedHeaderExpandableListView

Android中,大家都用過ListView,ExpandableListView等,也許你還用過 PinnedHeaderListView,但是如果我說PinnedHeaderExpandableListView,你聽過嗎?還有可下拉的 PinnedHeaderExpandableListView呢?沒聽過也不要緊,本文就是介紹這個東西的,為了讓大家有更直觀的了解,先上效果圖。通 過效果圖可以看出,首先它是一個ExpandableListView,但是它的頭部可以固定,其次,在它的上面還有一個頭部可以來回伸縮,恩,這就是本 文要介紹的自定義view。為了提高復用性,這個效果我分成來了2個view來實現,第一個是 PinnedHeaderExpandableListView來實現頭部固定的ExpandableListView,第二個view是 StickyLayout,這個view具有一個可以上下滑動的頭部,最后將這2個view組合在一起,就達到了如下的效果。

mahua

接口
    public interface OnHeaderUpdateListener {
        /**
         * 返回一個view對象即可
         * 注意:view必須要有LayoutParams
         */
        public View getPinnedHeader();

        public void updatePinnedHeader(View headerView, int firstVisibleGroupPos);
    }

    public interface OnGiveUpTouchEventListener {
        public boolean giveUpTouchEvent(MotionEvent event);
    }

如何使用

讓你的activity實現OnHeaderUpdateListener, OnGiveUpTouchEventListener兩個接口, 分別為PinnedHeaderExpandableListView中如何繪制和更新固定的頭部以及StickyLayout中content何時放棄事件處理。

    @Override
    public View getPinnedHeader() {
        View headerView = (ViewGroup) getLayoutInflater().inflate(R.layout.group, null);
        headerView.setLayoutParams(new LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

        return headerView;
    }

    @Override
    public void updatePinnedHeader(View headerView, int firstVisibleGroupPos) {
        Group firstVisibleGroup = (Group) adapter.getGroup(firstVisibleGroupPos);
        TextView textView = (TextView) headerView.findViewById(R.id.group);
        textView.setText(firstVisibleGroup.getTitle());
    }

    @Override
    public boolean giveUpTouchEvent(MotionEvent event) {
        if (expandableListView.getFirstVisiblePosition() == 0) {
            View view = expandableListView.getChildAt(0);
            if (view != null && view.getTop() >= 0) {
                return true;
            }
        }
        return false;
    }

項目主頁:http://www.baiduhome.net/lib/view/home/1426140506388

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!