Android Open Source - QuickReturn Abs List View Scroll Target






From Project

Back to project page QuickReturn.

License

The source code is released under:

MIT License

If you think the Android project QuickReturn listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.felipecsl.quickreturn.library.widget;
//from  w w  w.  j a  v a  2s  .com
import android.annotation.TargetApi;
import android.os.Build;
import android.view.View;
import android.widget.AbsListView;
import android.widget.GridView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.WrapperListAdapter;

public class AbsListViewScrollTarget
        extends QuickReturnTargetView
        implements AbsListView.OnScrollListener {

    private final AbsListView listView;

    public AbsListViewScrollTarget(final AbsListView listView, final View targetView, final int position) {
        this(listView, targetView, position, 0);
    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
    public AbsListViewScrollTarget(final AbsListView listView, final View targetView, final int position, final int targetViewHeight) {
        super(targetView, position);

        this.listView = listView;
        final QuickReturnAdapter adapter = getAdapter();

        if (adapter == null)
            throw new UnsupportedOperationException("You need to set the listView adapter before adding a targetView");

        if (position == POSITION_TOP)
            adapter.setTargetViewHeight(targetViewHeight);

        if (listView instanceof ListView)
            adapter.setVerticalSpacing(((ListView) listView).getDividerHeight());
        else if (listView instanceof GridView && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN)
            adapter.setVerticalSpacing(((GridView) listView).getVerticalSpacing());
    }

    @Override
    protected int getComputedScrollY() {
        if (listView.getChildCount() == 0 || listView.getAdapter() == null)
            return 0;

        int pos = listView.getFirstVisiblePosition();
        final View view = listView.getChildAt(0);
        return getAdapter().getPositionVerticalOffset(pos) - view.getTop();
    }

    private QuickReturnAdapter getAdapter() {
        ListAdapter adapter = listView.getAdapter();

        if (adapter instanceof WrapperListAdapter)
            adapter = ((WrapperListAdapter) adapter).getWrappedAdapter();

        if (!(adapter instanceof QuickReturnAdapter))
            throw new UnsupportedOperationException("Your QuickReturn ListView adapter must be an instance of QuickReturnAdapter.");

        return (QuickReturnAdapter) adapter;
    }

    @Override
    public void onScrollStateChanged(final AbsListView view, final int scrollState) {
    }

    @Override
    public void onScroll(final AbsListView view, final int firstVisibleItem, final int visibleItemCount, final int totalItemCount) {
        if (listView.getAdapter() == null || quickReturnView == null)
            return;

        final int maxVerticalOffset = getAdapter().getMaxVerticalOffset();
        final int listViewHeight = listView.getHeight();
        final int rawY = -Math.min(maxVerticalOffset > listViewHeight
                ? maxVerticalOffset - listViewHeight
                : listViewHeight, getComputedScrollY());

        final int translationY = currentTransition.determineState(rawY, quickReturnView.getHeight());

        translateTo(translationY);
    }
}




Java Source Code List

com.felipecsl.quickreturn.app.MainActivity.java
com.felipecsl.quickreturn.library.AbsListViewQuickReturnAttacher.java
com.felipecsl.quickreturn.library.CompositeAbsListViewOnScrollListener.java
com.felipecsl.quickreturn.library.CompositeOnScrollListener.java
com.felipecsl.quickreturn.library.QuickReturnAttacher.java
com.felipecsl.quickreturn.library.QuickReturnStateTransition.java
com.felipecsl.quickreturn.library.ScrollViewQuickReturnAttacher.java
com.felipecsl.quickreturn.library.SimpleAnimationListener.java
com.felipecsl.quickreturn.library.widget.AbsListViewScrollTarget.java
com.felipecsl.quickreturn.library.widget.ObservableScrollView.java
com.felipecsl.quickreturn.library.widget.QuickReturnAdapter.java
com.felipecsl.quickreturn.library.widget.QuickReturnTargetView.java
com.felipecsl.quickreturn.library.widget.ScrollViewScrollTarget.java