我正在尝试使用ViewPager.TransformPage
构建此(iCarousel iOS)库的 Rotary 显示类型,并且我的视图的translationX
属性存在问题。我有3张卡片,希望它们表现得像轮播一样:
这是我的代码:
@Override
public void transformPage(@NonNull View view, float realPosition) {
// ------------------scale---------------------------
float scaleFactor = 1 - 0.423f * Math.abs(realPosition);
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
// --------------------Z-------------------------
float zFactor = 1f - 0.35f * Math.abs(realPosition);
view.setTranslationZ(zFactor);
// --------------------X-------------------------
/**
* -0.3<=realPosition<=0.3 => x=realPosition (done)
*/
if (-.3 <= realPosition && realPosition <= 0.3) {
view.setTranslationX(realPosition);
}
float xFactor;
if (realPosition < -0.3) {
xFactor = 0.6f + realPosition;
view.setTranslationX(xFactor * 300);
}
if (realPosition > 0.3) {
xFactor = 0.6f - realPosition;
view.setTranslationX(xFactor * 300);
}
}
我能够实现translationZ
属性,但是translationX
令人困惑,因为realPosition
本身就是视图的x
属性。
问题是,当我滑动到下一张卡片时,另一张卡片堆叠在一边,我希望它们像椭圆形一样移动,并且在滑动时它们不应相互碰撞。
是否可以在ViewPager
的{{1}}中实现此行为?如果是这样,如何使X属性正确?
另外,是否可以通过PageTransformer
使用3个元素进行无限滚动?