ViewPager特定页面的动画

问题描述 投票:0回答:2

我使用以下代码为ViewPager提供了淡入和淡出效果:

//define view pager and set adapter:  
... 
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_startup_preference);
        //we're not using the layout natively, but using Fragment's layout
        //but setContentView is required -> it is accessed by : R.id.startPref_pager


        StartPrefPagerAdapter prefPagerAdapter =
                new StartPrefPagerAdapter(getSupportFragmentManager());

        final ViewPager StartPref_Viewpager = findViewById(R.id.startPref_pager);
        StartPref_Viewpager.setAdapter(prefPagerAdapter);  
...
... 




//set the animation with:  
StartPref_Viewpager.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(@NonNull View page, float position) {

            DisplayMetrics displayMetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

            page.setScaleX(0.5f);
            page.setScaleY(0.5f);
            page.setAlpha(0f);
            page.setVisibility(View.VISIBLE);

            page.animate().alpha(1f).setDuration(1000);
            page.animate().scaleX(1f).setDuration(500);
            page.animate().scaleY(1f).setDuration(500);

        }
    });  

...

但是,我希望从ViewPager的第二页开始而不是从第一页本身开始应用动画。我该如何实现?

android android-studio android-viewpager
2个回答
0
投票

我实际上还没有做过,但是从您的代码看来,基于position施加条件应该是可能的,如下所示。

StartPref_Viewpager.setPageTransformer(false, new ViewPager.PageTransformer() {
            @Override
            public void transformPage(@NonNull View page, float position) {

            //this is the viewpager page position
            if(position!=0)
            {

            DisplayMetrics displayMetrics = new DisplayMetrics();
            getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

            page.setScaleX(0.5f);
            page.setScaleY(0.5f);
            page.setAlpha(0f);
            page.setVisibility(View.VISIBLE);

            page.animate().alpha(1f).setDuration(1000);
            page.animate().scaleX(1f).setDuration(500);
            page.animate().scaleY(1f).setDuration(500);

            }
        }
    });  

0
投票

您可以在滚动时使用OnPageChangeListener检查页码,并为第0页使用默认的PageTransformer,而对其他页面则使用自定义PageTransformer

StartPref_Viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        if (position == 0)
            StartPref_Viewpager.setPageTransformer(false, mDefaultPageTransformer);
        else
            StartPref_Viewpager.setPageTransformer(false, mPageTransformer);
    }

    @Override
    public void onPageSelected(int position) {
    }

    @Override
    public void onPageScrollStateChanged(int state) {
    }
});


ViewPager.PageTransformer mPageTransformer = new ViewPager.PageTransformer() {
    @Override
    public void transformPage(@NonNull View page, float position) {

        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

        page.setScaleX(0.5f);
        page.setScaleY(0.5f);
        page.setAlpha(0f);
        page.setVisibility(View.VISIBLE);

        page.animate().alpha(1f).setDuration(1000);
        page.animate().scaleX(1f).setDuration(500);
        page.animate().scaleY(1f).setDuration(500);

    }
};

ViewPager.PageTransformer mDefaultPageTransformer = new ViewPager.PageTransformer() {
    @Override
    public void transformPage(@NonNull View page, float position) {

    }
};
© www.soinside.com 2019 - 2024. All rights reserved.