twiceyuan
9/13/2016 - 7:07 AM

ViewPager 实现 Gallery 效果。主要依靠设置 clipChildren 属性和 ViewPager.Transformer 接口实现

ViewPager 实现 Gallery 效果。主要依靠设置 clipChildren 属性和 ViewPager.Transformer 接口实现

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clipChildren="false">

    <ViewPager
        android:id="@+id/viewPager"
        android:layout_width="200dp"
        android:layout_height="100dp"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:clipChildren="false"/>

</FrameLayout>
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.ViewPager;
import android.view.View;

public class ScaleInTransformer implements ViewPager.PageTransformer {

    @Override
    public void transformPage(View view, float position) {
        float scale = 0.5f;
        float scaleValue = Math.abs(Math.abs(position) - 1) * scale + scale;
        scaleValue = position < -1 || position > 1 ? scale : scaleValue;
        view.setScaleX(scaleValue);
        view.setScaleY(scaleValue);
        view.setAlpha(scaleValue);

        /**
         * position = -1: PivotX 为 width
         * position =  0: PivotX 为 width / 2
         * position =  1: PivotX 为 0
         * 以此为基准做调整
         */
        final float offset = Build.VERSION.SDK_INT > 19 ? (Math.abs(position) / position) * 0.5f : 0f;
        view.setPivotX(view.getWidth() * (1 - position - offset) * scale);
        ViewCompat.setElevation(view, position >= -0.25 && position <= 0.25 ? 1 : 0);
    }
}