【问题标题】:Android card fragment animationAndroid卡片片段动画
【发布时间】:2015-11-04 08:06:14
【问题描述】:

这似乎是一个具有挑战性的动画,但我觉得这可以很容易地完成。我正在尝试在片段之间实现动画,如下所示(参见第二和第三象限)

进入和退出并不难,但预先显示下一张和上一张卡片的屏幕以及无缝过渡到下一张卡片超出了我的知识范围。如果有人做过类似的动画,请给我一些指导。

编辑

Android 点击转换的官方文档,即当用户点击页面被缩小以显示最后一页和上一页并滑动将其移动到下一个。我的要求是将页面保持在缩小级别并在按钮单击时进行转换:

问题:视图如何默认为 x 缩放级别以显示上一个下一页部分并在单击时转换。

【问题讨论】:

  • 用动画过渡查看寻呼机怎么样?
  • 我正在沿着这些路线前进,请参阅更新后的问题

标签: android animation android-fragments


【解决方案1】:

您可以使用PageTransformer自定义片段之间的过渡动​​画。

ZoomOutPageTransformer

import android.support.v4.view.ViewPager;
import android.view.View;

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

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

        if (position < -1) { // [-Infinity,-1)
            // This page is way off-screen to the left.
            view.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) {
                view.setTranslationX(horzMargin - vertMargin / 2);
            } else {
                view.setTranslationX(-horzMargin + vertMargin / 2);
            }

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

            // Fade the page relative to its size.
            view.setAlpha(MIN_ALPHA +
                    (scaleFactor - MIN_SCALE) /
                            (1 - MIN_SCALE) * (1 - MIN_ALPHA));

        } else { // (1,+Infinity]
            // This page is way off-screen to the right.
            view.setAlpha(0);
        }
    }
}

用法

 viewPager.setPageTransformer(true, new ZoomOutPageTransformer());

官方documentation

结帐thisthis 以显示接近一的边界。

【讨论】:

  • 感谢 Anoop,更新了问题看看你是否也有一些想法
【解决方案2】:

对于来这个问题寻找类似要求的人:

正如 Anoop 所建议的,官方文档很棒。只需实现 viewPager.PagerTransform 并将类提供给您的 viewPager。另外transformPage(实现的函数)在动画过渡中也很重要。

下一部分,是显示下一个和上一个片段的角。这可以通过片段的 xml 来实现。参考:Android tip viewpager with protruding children

希望这有助于人们创建交互式应用程序。

更新

Anoop 分享的这篇文章让this 的转换变得轻而易举。干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 2012-06-08
    相关资源
    最近更新 更多