【问题标题】:Panoramic Background animation in AndroidAndroid中的全景背景动画
【发布时间】:2014-09-08 13:34:09
【问题描述】:

我有一个全景背景作为天空,我想从左到右移动,然后从右到左移动以模拟移动的云动画作为屏幕背景。

这应该无限重复,然后在最右边然后返回最左边..

我尝试了以下方法:

  Animation left = AnimationUtils.loadAnimation(MainActivity.this, com.icare.kids.R.anim.view_transition_out_right);
  left.setRepeatCount(Animation.INFINITE);
  left.setRepeatMode(Animation.REVERSE);
  left.setDuration(3000);

  findViewById(id.cloud).startAnimation(left);

但这似乎不起作用......有什么解决方案吗?

我目前正在将图像设置为 ImageView,如下所示:

<ImageView
    android:id="@+id/cloud"
    android:layout_width="3000dip"
    android:layout_height="wrap_content"
    android:layout_below="@id/topbar"
    android:scaleType="matrix"
    android:src="@drawable/bgpan" />

如何将图像设置为从最左边开始,如下图所示,以帮助实现全景动画效果:

【问题讨论】:

  • 为什么不移动位图而不是文本视图?我的意思是,如果你在内存中加载了背景(3000px),你真的浪费了很多内存,甚至不可见......你应该只在动画的每一帧中剪切一张位图,然后得到 x +OFFSET 以此类推,每一帧都必须检查边界,看看你是否必须再次从左边开始......
  • Stackoverflow 有一些相关的答案,看:stackoverflow.com/a/17275163/2684

标签: android animation


【解决方案1】:

在所有手机范围内高效且快速的最佳解决方案实际上是仅对云进行动画处理,同时保持背景静止。 您还可以为速度添加一些变量,为云的速度添加一些随机性,这样您就不会得到单调循环。

实现细节和解决方案取自this answer

【讨论】:

    【解决方案2】:

    您可以尝试的一件事是使用带有假拖动的 Viewpager 对象,您可以在其中不断将背景重新添加到生成的新视图中,同时禁用用户输入。

    这会给人一种你正在尝试做的事情的错觉。

    假设您的适配器中有 4 个视图,每个视图仅包含一个填充整个屏幕的图像资源,并且 Viewpager 的假拖动平移从视图 A 到视图 B,绘制视图 C 并绘制视图 D,然后它假装从视图 B 拖到视图 C 并再次绘制视图 A

    我很好奇这是否适合你

    【讨论】:

    • mmmm 嗯,这是一个不错的主意,我认为应该在 ImageView 上做一个简单的动画技巧,而不需要使用 Viewpager .. 但如果这是我的最后一个选择,我会考虑 viewpager 谢谢建议
    • 你说得对,应该有@Nader,但我对动画类有很多问题
    猜你喜欢
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 2011-06-09
    相关资源
    最近更新 更多