Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带有无限视图寻呼机的PageTransformer_Android_Android Viewpager_Android Pagetransformer - Fatal编程技术网

Android 带有无限视图寻呼机的PageTransformer

Android 带有无限视图寻呼机的PageTransformer,android,android-viewpager,android-pagetransformer,Android,Android Viewpager,Android Pagetransformer,我一直在将表格变压器(使用源代码)与无限视图寻呼机循环相结合 结果不是我们所期望的。它没有编译错误,但在页面之间滑动时可能会出现空白页面 主要活动 public class MainActivity extends AppCompatActivity { public ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super.on

我一直在将
表格变压器
(使用源代码)与无限视图寻呼机循环相结合

结果不是我们所期望的。它没有编译错误,但在页面之间滑动时可能会出现空白页面

主要活动

public class MainActivity extends AppCompatActivity
{
    public ViewPager mPager;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        // Initialize ViewPager
        mPager = (ViewPager) findViewById(R.id.container);

        InfiniteViewPagerAdapter adapter = new InfiniteViewPagerAdapter(getSupportFragmentManager());
        List<Fragment> pagerFragments = createPagerFragments();
        adapter.setPagerFragments(pagerFragments);
        mPager.setAdapter(adapter);

        mPager.setPageTransformer(true, new TabletTransformer());
        mPager.setCurrentItem(1);
    } 

    private List<Fragment> createPagerFragments() 
    {
        List<Fragment> dataList = new LinkedList<Fragment>();

        dataList.add(0, FirstFragment.newInstance("First page"));
        dataList.add(1, SecondFragment.newInstance("Main page"));
        dataList.add(2, ThirdFragment.newInstance("Third page"));
        dataList.add(3, FourthFragment.newInstance("Fourth page"));

        return dataList;
    }
}
public类MainActivity扩展了AppCompatActivity
{
公众阅览器;
@凌驾
创建时受保护的void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
//初始化ViewPager
mPager=(ViewPager)findViewById(R.id.container);
InfiniteViewPagerAdapter=新的InfiniteViewPagerAdapter(getSupportFragmentManager());
List pagerFragments=createPagerFragments();
适配器.setPagerFragments(pagerFragments);
mPager.setAdapter(适配器);
setPageTransformer(true,新的TabletTransformer());
mPager.setCurrentItem(1);
} 
私有列表createPagerFragments()
{
List dataList=新建LinkedList();
添加(0,FirstFragment.newInstance(“第一页”);
add(1,SecondFragment.newInstance(“主页”);
添加(2,ThirdFragment.newInstance(“第三页”);
add(3,FourthFragment.newInstance(“第四页”);
返回数据列表;
}
}
活动\u main.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="com.example.wlwong.tablettransformer.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <com.example.wlwong.tablettransformer.InfiniteViewPager.InfiniteViewPager
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.design.widget.CoordinatorLayout>

我调用了两个类来实现无限视图分页器循环:InfiniteViewPagerInfiniteViewPagerAdapter

InfiniteView管理器类

    public class InfiniteViewPager extends ViewPager {

    private OnPageChangeListener externalOnPageChangeListener = null;

    public InfiniteViewPager(Context context) {
        super(context);
        setActualOnPageChangeListener(new PageChangeListener(this));
    }

    public InfiniteViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
        setActualOnPageChangeListener(new PageChangeListener(this));
    }

    private void setActualOnPageChangeListener(OnPageChangeListener listener) {
        super.setOnPageChangeListener(listener);
    }

    @Override
    public void setOnPageChangeListener(OnPageChangeListener listener) {
        this.externalOnPageChangeListener = listener;
    }

    private OnPageChangeListener getExternalOnPageChangeListener() {
        return this.externalOnPageChangeListener;
    }

    private static class PageChangeListener implements OnPageChangeListener {

        private final InfiniteViewPager viewPager;

        public PageChangeListener(final InfiniteViewPager viewPager) {
        this.viewPager = viewPager;
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            final OnPageChangeListener externalOnPageChangeListener =
                viewPager.getExternalOnPageChangeListener();
            if (externalOnPageChangeListener != null) {
            externalOnPageChangeListener.onPageScrolled(
                    position, positionOffset, positionOffsetPixels);
            }
        }    

        @Override
        public void onPageSelected(int position) {
            final OnPageChangeListener externalOnPageChangeListener =
                viewPager.getExternalOnPageChangeListener();
            if (externalOnPageChangeListener != null) {
                externalOnPageChangeListener.onPageSelected(position);
            }

            InfiniteViewPagerAdapter adapter = (InfiniteViewPagerAdapter) viewPager.getAdapter();
            List<Fragment> pagerFragments = adapter.getPagerFragments();
            // Ensure that cycling only occurs if there are 3 or more fragments.
            if (pagerFragments.size() > 2) {
                final int cycleResult = cyclePagerFragments(pagerFragments, position);
                if (cycleResult != 0) {
                    adapter.setPagerFragments(pagerFragments);
                    adapter.notifyDataSetChanged();

                    // Turn off the actual and external OnPageChangeListeners, so that
                    // this function does not unnecessarily get called again when
                    // setting the current item.
                    viewPager.setOnPageChangeListener(null);
                    viewPager.setActualOnPageChangeListener(null);
                    viewPager.setCurrentItem(position + cycleResult, false);
                    viewPager.setOnPageChangeListener(externalOnPageChangeListener);
                    viewPager.setActualOnPageChangeListener(this);
                }
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            final OnPageChangeListener externalOnPageChangeListener =
                viewPager.getExternalOnPageChangeListener();
            if (externalOnPageChangeListener != null) {
                externalOnPageChangeListener.onPageScrollStateChanged(state);
            }
        }
    }

    private static int cyclePagerFragments(List<Fragment> pagerFragments, final int position) {
        final int lastPosition = pagerFragments.size() - 1;
        if (position == lastPosition) {
            pagerFragments.add(pagerFragments.remove(0));
            return -1;
        } else if (position == 0) {
            pagerFragments.add(0, pagerFragments.remove(lastPosition));
            return 1;
        }

        return 0;
    }
}
公共类InfiniteViewPage扩展了ViewPager{
私有OnPageChangeListener外部OnPageChangeListener=null;
公共无限视图管理器(上下文){
超级(上下文);
setActualOnPageChangeListener(新的PageChangeListener(此));
}
公共无限视图管理器(上下文、属性集属性){
超级(上下文,attrs);
setActualOnPageChangeListener(新的PageChangeListener(此));
}
私有void setActualOnPageChangeListener(OnPageChangeListener侦听器){
super.setOnPageChangeListener(listener);
}
@凌驾
public void setOnPageChangeListener(OnPageChangeListener侦听器){
this.externalOnPageChangeListener=监听器;
}
私有OnPageChangeListener getExternalOnPageChangeListener(){
返回this.externalOnPageChangeListener;
}
私有静态类PageChangeListener实现OnPageChangeListener{
私有最终InfiniteViewPager视图寻呼机;
public PageChangeListener(最终的InfiniteViewPager视图寻呼机){
this.viewPager=viewPager;
}
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
最终OnPageChangeListener外部OnPageChangeListener=
getExternalOnPageChangeListener();
if(externalOnPageChangeListener!=null){
externalOnPageChangeListener.onPageScrolled(
位置、位置偏移、位置偏移像素);
}
}    
@凌驾
已选择页面上的公共无效(内部位置){
最终OnPageChangeListener外部OnPageChangeListener=
getExternalOnPageChangeListener();
if(externalOnPageChangeListener!=null){
externalOnPageChangeListener.onPageSelected(位置);
}
InfinitiewPagerAdapter=(InfinitiewPagerAdapter)viewPager.getAdapter();
List pagerFragments=adapter.getPagerFragments();
//确保循环仅在有3个或更多碎片时发生。
如果(pagerFragments.size()>2){
最终int cycleResult=cyclePagerFragments(页面碎片,位置);
如果(循环结果!=0){
适配器.setPagerFragments(pagerFragments);
adapter.notifyDataSetChanged();
//关闭实际和外部OnPageChangeListeners,以便
//此函数在以下情况下不会被不必要地再次调用
//设置当前项。
viewPager.setOnPageChangeListener(空);
viewPager.setActualOnPageChangeListener(空);
viewPager.setCurrentItem(位置+循环结果,false);
viewPager.setOnPageChangeListener(externalOnPageChangeListener);
viewPager.setActualOnPageChangeListener(此);
}
}
}
@凌驾
公共无效onPageScrollStateChanged(int状态){
最终OnPageChangeListener外部OnPageChangeListener=
getExternalOnPageChangeListener();
if(externalOnPageChangeListener!=null){
externalOnPageChangeListener.onPageScrollStateChanged(状态);
}
}
}
私有静态整型循环片段(列出页面片段,最终整型位置){
final int lastPosition=pagerFragments.size()-1;
如果(位置==最后位置){
pagerFragments.add(pagerFragments.remove(0));
返回-1;
}否则如果(位置==0){
pagerFragments.add(0,pagerFragments.remove(lastPosition));
返回1;
}
返回0;
}
}
InfiniteViewer适配器类

    public class InfiniteViewPagerAdapter extends FragmentStatePagerAdapter {

    private List<Fragment> pagerFragments;

    public InfiniteViewPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    public List<Fragment> getPagerFragments() {
        return pagerFragments;
    }

    public void setPagerFragments(final List<Fragment> pagerFragments) {
        this.pagerFragments = pagerFragments;
    }

    @Override
    public Fragment getItem(int position) {
        return (pagerFragments != null && pagerFragments.size() > position) ?
            pagerFragments.get(position) : null;
    }

    @Override
    public int getCount() {
        return (pagerFragments != null) ? pagerFragments.size() : 0;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}    
公共类InfiniteViewPageAdapter扩展了FragmentStatePagerAdapter{
私有列表页面碎片;
公共InfiniteViewer适配器(FragmentManager fm){
超级(fm);
}
公共列表getPagerFragments(){
返回页碎片;
}
公共v