2

当用户在寻呼机内滚动时,MyViewPager 必须垂直滚动。这在 android 版本 19 中工作,现在我已经将 android 版本更新到 v21,我得到的是寻呼机上的刷新球。我可以使球看不见,但寻呼机仍然没有滚动。

这是我的 main-content.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.widget.SwipeRefreshLayout
    android:layout_below="@id/pull_text_layout"
    android:id="@+id/refresh"
    android:layout_width="match_parent"
    android:layout_height="205dp">
<com.pager.MyViewPager
           android:id="@+id/pager"
           android:layout_marginTop="5dp"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:background="@android:color/white">
       </com.pager.MyViewPager>
</android.support.v4.widget.SwipeRefreshLayout>

这是 MyActivity.java

// Pager
    mPager = (MyViewPager) findViewById(R.id.pager);
    mPagerAdapter = new CardsViewPagerAdapter(this, cardResourceIds, cardBackResourceIds);
    mPager.setAdapter(mPagerAdapter);
    mPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(final int position) {
            updateToCard(position);
            new Thread(new Runnable() {

                @Override
                public void run() {
                    try {
                        Thread.sleep(Delays.DELAY_BALANCE);
                        mPagerAdapter.updateBalance(position, cardBalances[mRandom.nextInt(2)]);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }).start();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
    mPager.setListener(new MyViewPager.ScrollListener() {

        @Override
        public void onScrollStarted() {
            mRefresh.setEnabled(false);
        }

        @Override
        public void onScrollFinished() {
            mRefresh.setEnabled(true);
        }
    });

    mRefresh = (SwipeRefreshLayout) findViewById(R.id.refresh);
    mRefresh.setColorScheme(android.R.color.transparent, android.R.color.transparent,
                                android.R.color.transparent, android.R.color.transparent);
    mRefresh.setOnRefreshListener(new OnRefreshListener() {
        @Override
        public void onRefresh() {
            mRefresh.setRefreshing(false);
            addPaymentFragment(mPager.getCurrentItem() != 3);
        }
    });

这是 MyViewPager

public class MyViewPager extends ViewPager {

    private boolean paginationEnabled = true,
                        scrolling = false;
    private int scrolled;
    private ScrollListener listener;

    public MyViewPager(Context context) {
        super(context);
    }

    public MyViewPager(Context context, AttributeSet attr) {
        super(context, attr);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        if (!paginationEnabled) {
            return false;
        } else {
            int action = e.getAction();
            if (scrolling && (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL)) {
                scrolling = false;
                if (listener != null) {
                    listener.onScrollFinished();
                }
                if(scrolling)
                {}

            }
            return super.onInterceptTouchEvent(e);
        }
    }

    public void setPaginationEnabled(boolean paginationEnabled) {
        this.paginationEnabled = paginationEnabled;
    }

    public void setListener(ScrollListener listener) {
        this.listener = listener;
    }

    @Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        scrolling = true;
        if (listener != null) {
            listener.onScrollStarted();
        }
    }

    public interface ScrollListener {
        public void onScrollStarted();
        public void onScrollFinished();
    }

}
4

0 回答 0