gpt4 book ai didi

android - 向后兼容的 PageTransformer

转载 作者:行者123 更新时间:2023-11-29 14:23:18 25 4
gpt4 key购买 nike

我正在尝试为 ViewPager 中的项目设置动画,而 PageTransformer 符合要求。我希望它向后兼容 Android 2.2,所以我使用支持 v4 库。然而……

As property animation is only supported as of Android 3.0 and forward, setting a PageTransformer on a > ViewPager on earlier platform versions will be ignored.

所以 PageTransformer 不能在旧版本上工作

我正在使用 Jake Wharton's NineOldAndroids库,以便我可以使用该 API,但我不确定如何为 ViewPager 制作动画。

我该怎么做?

最佳答案

您需要使用 AnimatorProxy 包装器实现 PageTransformer 以设置 View 的转换属性。

然后困难的部分是 ViewPager 将忽略较低 API 版本中的 PageTransformer。因此,您需要修改 ViewPager 本身以使用 PageTransformer

我有一个 forked version of the support library on GitHub这允许这样做以及使用 NineOldAndroids 动画师进行自定义 fragment 转换。使用 animator-transition 分支。这是一个 Maven 项目,因此您可以从 v4 子目录构建它。

public class ZoomOutPageTransformer implements PageTransformer {
private static float MIN_SCALE = 0.85f;
private static float MIN_ALPHA = 0.5f;

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

AnimatorProxy proxy = AnimatorProxy.wrap(view);

if (position < -1) { // [-Infinity,-1)
// This page is way off-screen to the left.
proxy.setAlpha(0);
} else if (position <= 1) { // [-1,1]
// Modify the default slide transition to shrink the page as well
float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
float vertMargin = pageHeight * (1 - scaleFactor) / 2;
float horzMargin = pageWidth * (1 - scaleFactor) / 2;
if (position < 0) {
proxy.setTranslationX(horzMargin - vertMargin / 2);
} else {
proxy.setTranslationX(-horzMargin + vertMargin / 2);
}

// Scale the page down (between MIN_SCALE and 1)
proxy.setScaleX(scaleFactor);
proxy.setScaleY(scaleFactor);

// Fade the page relative to its size.
proxy.setAlpha(MIN_ALPHA +
(scaleFactor - MIN_SCALE) /
(1 - MIN_SCALE) * (1 - MIN_ALPHA));
} else { // (1,+Infinity]
// This page is way off-screen to the right.
proxy.setAlpha(0);
}
}
}

关于android - 向后兼容的 PageTransformer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15767729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com