0

我在 ViewPager 中有一堆片段,自定义的 PageTransformer 定义如下。

mPager.setPageTransformer(true, new ViewPager.PageTransformer() {
    @Override
    public void transformPage(View page, float position) {
        page.setTranslationX(page.getWidth() * -position);
    }
}); 

如何为离开的片段绘制阴影?长话短说,我正在寻找 Play Book 中的东西,不需要卷曲效果,只是堆栈顶部元素的阴影,最好符合 API 18

谢谢

4

1 回答 1

1

我对setPageMargin有疑问,因为它仅在传入视图具有 alpha 透明度时才有效。我的意思是,边缘的高度似乎错误,它位于传入视图的下方,但也许我找到了妥协

在此处输入图像描述

这是边距和自定义PageTransformer的活动中的代码

    int margin = getResources().getDisplayMetrics().widthPixels / 15;
    mPager = (ViewPager) findViewById(R.id.pager);

    mPager.setPageMargin(margin);
    mPager.setPageMarginDrawable(R.drawable.shadow);
    mPager.setPageTransformer(true, new StackTransformer());

其中drawable定义为

    <shape xmlns:android="http://schemas.android.com/apk/res/android" 
       android:shape="rectangle" >
        <gradient
            android:angle="360"
            android:endColor="#00000000"
            android:startColor="#aa000000"
            android:type="linear" />
    </shape>

最后是 PageTransformer 的transformPage方法,我在其中使用 position 和 alpha 来找到可以接受的效果

@Override
public void transformPage(View view, float position) {
    int pageWidth = view.getWidth();
    if (position < -1) {
        view.setAlpha(0);
    } else if (position <= 0) { 
        view.setAlpha(1);
        view.setTranslationX(0);
    } else if (position <= 1) { 
        view.setAlpha(1-position/2); // divide by 2 is the trick
        view.setTranslationX(pageWidth * -position);
    } else { 
        view.setAlpha(0);
    }
}

产生的效果就是你在上面的 gif 中看到的,但我确信在那里,有更好的方法来实现这个效果

于 2016-10-31T10:22:29.097 回答