Search in sources :

Example 1 with ScrollingView

use of android.support.v4.view.ScrollingView in project CollapsingRefresh by ckrgithub.

the class RefreshContentWrapper method findScrollableViewInternal.

private View findScrollableViewInternal(View content, boolean selfable) {
    View scrollableView = null;
    Queue<View> views = new LinkedBlockingQueue<>(Collections.singletonList(content));
    while (!views.isEmpty() && scrollableView == null) {
        View view = views.poll();
        if (view != null) {
            if ((selfable || view != content) && (view instanceof AbsListView || view instanceof ScrollView || view instanceof ScrollingView || view instanceof NestedScrollingChild || view instanceof NestedScrollingParent || view instanceof WebView || view instanceof ViewPager)) {
                scrollableView = view;
            } else if (view instanceof ViewGroup) {
                ViewGroup group = (ViewGroup) view;
                for (int j = 0; j < group.getChildCount(); j++) {
                    views.add(group.getChildAt(j));
                }
            }
        }
    }
    return scrollableView;
}
Also used : NestedScrollingParent(android.support.v4.view.NestedScrollingParent) NestedScrollView(android.support.v4.widget.NestedScrollView) ScrollView(android.widget.ScrollView) NestedScrollingChild(android.support.v4.view.NestedScrollingChild) ViewGroup(android.view.ViewGroup) ScrollingView(android.support.v4.view.ScrollingView) AbsListView(android.widget.AbsListView) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) WebView(android.webkit.WebView) ScrollingView(android.support.v4.view.ScrollingView) View(android.view.View) NestedScrollView(android.support.v4.widget.NestedScrollView) WebView(android.webkit.WebView) AbsListView(android.widget.AbsListView) RecyclerView(android.support.v7.widget.RecyclerView) ScrollView(android.widget.ScrollView) ViewPager(android.support.v4.view.ViewPager)

Example 2 with ScrollingView

use of android.support.v4.view.ScrollingView in project CollapsingRefresh by ckrgithub.

the class SmartRefreshLayout method onFinishInflate.

// </editor-fold>
// <editor-fold desc="生命周期 life cycle">
@Override
protected void onFinishInflate() {
    super.onFinishInflate();
    Logd(TAG, "onFinish,Inflate: ");
    final int count = getChildCount();
    if (count > 3) {
        throw new RuntimeException("最多只支持3个子View,Most only support three sub view");
    } else if (mEnablePureScrollMode && count > 1) {
        throw new RuntimeException("PureScrollMode模式只支持一个子View,Most only support one sub view in PureScrollMode");
    }
    Logw(TAG, "onFinishInflate: count:" + count);
    // 定义为确认的子View索引
    boolean[] uncertains = new boolean[count];
    // 第一次查找确认的 子View
    for (int i = 0; i < count; i++) {
        View view = getChildAt(i);
        Logw(TAG, "onFinishInflate: view:" + view);
        if (view instanceof RefreshHeader && mRefreshHeader == null) {
            mRefreshHeader = ((RefreshHeader) view);
        } else if (view instanceof RefreshFooter && mRefreshFooter == null) {
            mEnableLoadmore = mEnableLoadmore || !mManualLoadmore;
            mRefreshFooter = ((RefreshFooter) view);
        } else if (mRefreshContent == null && (view instanceof AbsListView || view instanceof WebView || view instanceof ScrollView || view instanceof ScrollingView || view instanceof NestedScrollingChild || view instanceof NestedScrollingParent || view instanceof ViewPager)) {
            mRefreshContent = new RefreshContentWrapper(view);
        } else if (RefreshHeaderWrapper.isTagedHeader(view) && mRefreshHeader == null) {
            mRefreshHeader = new RefreshHeaderWrapper(view);
        } else if (RefreshFooterWrapper.isTagedFooter(view) && mRefreshFooter == null) {
            mRefreshFooter = new RefreshFooterWrapper(view);
        } else if (RefreshContentWrapper.isTagedContent(view) && mRefreshContent == null) {
            mRefreshContent = new RefreshContentWrapper(view);
        } else {
            // 标记未确认
            uncertains[i] = true;
        }
    }
    // 如果有 未确认(uncertains)的子View 通过智能算法计算
    for (int i = 0; i < count; i++) {
        if (uncertains[i]) {
            View view = getChildAt(i);
            Logd(TAG, "onFinishInflate: uncertains:" + view);
            if (count == 1 && mRefreshContent == null) {
                mRefreshContent = new RefreshContentWrapper(view);
            } else if (i == 0 && mRefreshHeader == null) {
                mRefreshHeader = new RefreshHeaderWrapper(view);
            } else if (count == 2 && mRefreshContent == null) {
                mRefreshContent = new RefreshContentWrapper(view);
            } else if (i == 2 && mRefreshFooter == null) {
                mEnableLoadmore = mEnableLoadmore || !mManualLoadmore;
                mRefreshFooter = new RefreshFooterWrapper(view);
            } else if (mRefreshContent == null) {
                mRefreshContent = new RefreshContentWrapper(view);
            }
        }
    }
    if (isInEditMode()) {
        if (mPrimaryColors != null) {
            if (mRefreshHeader != null) {
                mRefreshHeader.setPrimaryColors(mPrimaryColors);
            }
            if (mRefreshFooter != null) {
                mRefreshFooter.setPrimaryColors(mPrimaryColors);
            }
        }
        // TODO: 2017/10/8 头部、内容、底部排序
        if (mRefreshContent != null) {
            bringChildToFront(mRefreshContent.getView());
        }
        if (mRefreshHeader != null && mRefreshHeader.getSpinnerStyle() != SpinnerStyle.FixedBehind) {
            if (isHeaderFixBehind) {
            } else {
                bringChildToFront(mRefreshHeader.getView());
            }
        }
        if (mRefreshFooter != null && mRefreshFooter.getSpinnerStyle() != SpinnerStyle.FixedBehind) {
            bringChildToFront(mRefreshFooter.getView());
        }
        if (mKernel == null) {
            mKernel = new RefreshKernelImpl();
        }
    }
}
Also used : RefreshHeaderWrapper(com.scwang.smartrefresh.impl.RefreshHeaderWrapper) RefreshHeader(com.scwang.smartrefresh.api.RefreshHeader) RefreshFooter(com.scwang.smartrefresh.api.RefreshFooter) ScrollingView(android.support.v4.view.ScrollingView) AbsListView(android.widget.AbsListView) ScrollingView(android.support.v4.view.ScrollingView) View(android.view.View) WebView(android.webkit.WebView) AbsListView(android.widget.AbsListView) ScrollView(android.widget.ScrollView) ViewPager(android.support.v4.view.ViewPager) Paint(android.graphics.Paint) NestedScrollingParent(android.support.v4.view.NestedScrollingParent) RefreshFooterWrapper(com.scwang.smartrefresh.impl.RefreshFooterWrapper) ScrollView(android.widget.ScrollView) NestedScrollingChild(android.support.v4.view.NestedScrollingChild) RefreshContentWrapper(com.scwang.smartrefresh.impl.RefreshContentWrapper) WebView(android.webkit.WebView)

Aggregations

NestedScrollingChild (android.support.v4.view.NestedScrollingChild)2 NestedScrollingParent (android.support.v4.view.NestedScrollingParent)2 ScrollingView (android.support.v4.view.ScrollingView)2 ViewPager (android.support.v4.view.ViewPager)2 View (android.view.View)2 WebView (android.webkit.WebView)2 AbsListView (android.widget.AbsListView)2 ScrollView (android.widget.ScrollView)2 Paint (android.graphics.Paint)1 NestedScrollView (android.support.v4.widget.NestedScrollView)1 RecyclerView (android.support.v7.widget.RecyclerView)1 ViewGroup (android.view.ViewGroup)1 RefreshFooter (com.scwang.smartrefresh.api.RefreshFooter)1 RefreshHeader (com.scwang.smartrefresh.api.RefreshHeader)1 RefreshContentWrapper (com.scwang.smartrefresh.impl.RefreshContentWrapper)1 RefreshFooterWrapper (com.scwang.smartrefresh.impl.RefreshFooterWrapper)1 RefreshHeaderWrapper (com.scwang.smartrefresh.impl.RefreshHeaderWrapper)1 LinkedBlockingQueue (java.util.concurrent.LinkedBlockingQueue)1