Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.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 ViewPager手动调用PageTransformer transformPage_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android ViewPager手动调用PageTransformer transformPage

Android ViewPager手动调用PageTransformer transformPage,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我有一个带有PageTransformer实现的ViewPager,它在ViewPager的下一页上做了一些有趣的事情。我的实现如下所示: class ZoomOutPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.85f; private static final float MIN_ALPHA = 0.5f; @Override public voi

我有一个带有PageTransformer实现的ViewPager,它在ViewPager的下一页上做了一些有趣的事情。我的实现如下所示:

class ZoomOutPageTransformer implements ViewPager.PageTransformer {
private static final float MIN_SCALE = 0.85f;
private static final float MIN_ALPHA = 0.5f;

@Override
public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();

    if (position < -1) { // [-Infinity,-1)
        // This page is way off-screen to the left.
        view.setAlpha(0);

    } else if (position <= 0) { // [-1,0]
        // Use the default slide transition when moving to the left page


    } else if (position < 1) { // (0,1]
      do some funky stuff to the page currently being scrolled into the main view on scrolling left


    } else if (position==1) {
       do some funky stuff to the next page
    }

    else { // (1,+Infinity]
        // This page is way off-screen to the right.
        view.setAlpha(1);
    }
}
类ZoomoutPagetTransformer实现ViewPager.PageTransformer{
专用静态最终浮动最小刻度=0.85f;
专用静态最终浮动最小值α=0.5f;
@凌驾
公共页面(视图、浮动位置){
int pageWidth=view.getWidth();
if(位置<-1){/[-无穷大,-1)
//这个页面在屏幕的左边。
视图。setAlpha(0);

}否则,如果(位置根据Android开发者的网站:

每当滚动可见/附加页面时,都会调用PageTransformer。这为应用程序提供了一个机会,可以使用动画属性对页面视图应用自定义转换 因此,在第一次加载寻呼机时,您不会看到任何过渡动画


这是你一直在使用的一个很好的方法,但我不知道你是否已经尝试过,但是你能在viewpager第一次加载时将其作为一个整体进行动画制作吗。

我也遇到过类似的情况,最后我使用了一个假拖动来进行初始转换:

public void onResume() {
    ...
    Handler handler = new Handler();
    final Runnable r = new Runnable() {
        public void run() {
            // force transform with a 1 pixel nudge
            mViewPager.beginFakeDrag();
            mViewPager.fakeDragBy(1.0f);
            mViewPager.endFakeDrag();
        }
    };
    handler.postDelayed(r, 10);  // some small delay in ms
}

我相信这就是它应该做的:
ViewPager.PageTransformer
只为页面之间的转换设置动画。除此之外,我不知道如果不手动设置动画(根本没有
PageTransformer
),你怎么能做你想做的事情。嗯,好吧。现在,我正在做一个小改动,把
pager.setCurrentItem(1)
pager.setCurrentItem(0,true);
来触发transformPage方法。如果你有更好的方法,我很乐意听你这么说!我不确定,但你能不能将效果应用到整个片段上,比如如果你想要淡入淡出的动画,你可以在viewpager加载时先将其应用到它。@Appyx只需选中
adapter.getCount()即可修复它>0
之所以这样做,是因为setCurrentItem没有平滑滚动,导致无法调用页面转换器。