【问题标题】:Android animations compatibilityAndroid 动画兼容性
【发布时间】:2013-10-28 12:22:18
【问题描述】:

我目前正在开发一个与 API 14 及更高版本兼容的应用程序。它使用 ObjectAnimators 来做很多动画。目标是使所有动画与 Android 2.2–2.2.3 Froyo(API 级别 8)及更高版本兼容。 我已经开始使用 Nineoldandroids 来转换所有的 objectanimator 代码。但是有一些函数我不确定可以使用什么作为替代,因为我不相信 Nineoldandroid 支持它们(我可能是错的)。

这里是当前仅兼容 API 11 的函数列表。任何帮助将不胜感激。

setTranslationX 设置翻译Y 设置阿尔法 设置X 设置Y 设置滚动X 设置滚动Y

【问题讨论】:

  • 查看droidQuery 以编写与 Froyo 兼容的简单动画。这使用了 NineOldAndroids,并进一步简化了动画语法。

标签: android animation nineoldandroids


【解决方案1】:

简而言之:是的,nineoldandroids 确实支持这些。

如果您查看 Nineoldandroids 中的 ObjectAnimator 的源代码,您会注意到它使用代理来为您要设置动画的属性设置动画。

    PROXY_PROPERTIES.put("alpha", PreHoneycombCompat.ALPHA);
    PROXY_PROPERTIES.put("pivotX", PreHoneycombCompat.PIVOT_X);
    PROXY_PROPERTIES.put("pivotY", PreHoneycombCompat.PIVOT_Y);
    PROXY_PROPERTIES.put("translationX", PreHoneycombCompat.TRANSLATION_X);
    PROXY_PROPERTIES.put("translationY", PreHoneycombCompat.TRANSLATION_Y);
    PROXY_PROPERTIES.put("rotation", PreHoneycombCompat.ROTATION);
    PROXY_PROPERTIES.put("rotationX", PreHoneycombCompat.ROTATION_X);
    PROXY_PROPERTIES.put("rotationY", PreHoneycombCompat.ROTATION_Y);
    PROXY_PROPERTIES.put("scaleX", PreHoneycombCompat.SCALE_X);
    PROXY_PROPERTIES.put("scaleY", PreHoneycombCompat.SCALE_Y);
    PROXY_PROPERTIES.put("scrollX", PreHoneycombCompat.SCROLL_X);
    PROXY_PROPERTIES.put("scrollY", PreHoneycombCompat.SCROLL_Y);
    PROXY_PROPERTIES.put("x", PreHoneycombCompat.X);
    PROXY_PROPERTIES.put("y", PreHoneycombCompat.Y);

像往常一样使用 ObjectAnimator(只要确保它是 com.nineoldandroids.animation!

ObjectAnimator anim = ObjectAnimator.ofFloat(yourView, "translationX", 0f, 1f);
anim.setDuration(1000);
anim.start();

编辑:这是一个如何在 onTouchListener 中为视图设置动画的示例。请注意,返回 false 表示侦听器尚未消费该事件。

view.setOnTouchListener(new OnTouchListener() {
      @Override
      public boolean onTouch(View view, MotionEvent event) {
        ObjectAnimator anim = ObjectAnimator.ofFloat(view, "translationX", 0f, 1f);
        anim.setDuration(1000);
        anim.start();
        return false;
      }
    });

【讨论】:

  • 非常感谢您的回答,我发现它非常有用。我一直在浏览 Nineoldandroids 演示示例以获取使用示例。到目前为止,一切都很好,除了一件事。我实际上是基于 onTouch() 事件为视图设置动画,我不能使用 ObjectAnimator 设置对象的视图属性。关于如何设置属性的任何想法?
  • @ahmad,当然你仍然可以在onTouch 事件中使用ObjectAnimator
  • 我修改了答案以包含 onTouch 的示例。如果这回答了您的问题,请告诉我,如果您觉得有用,请将其标记为已接受。
  • 当然,非常感谢您的帮助。 onTouch 我的意思是如何在不使用对象动画器的情况下使用触摸坐标设置TranslateX。但我在 ProxyAnimators 中找到了答案 :) 再次感谢您的帮助!
【解决方案2】:

问题是指为XTtranslationX等字段设置立即值。

您可以使用 NineOldAndroids 附带的帮助程序类 ViewHelper 来做到这一点。

例如替换:

myView.setX(4f);

与:

ViewHelper.setX(myView, 4f);

有关所有支持的方法,请参阅:https://github.com/JakeWharton/NineOldAndroids/blob/master/library/src/com/nineoldandroids/view/ViewHelper.java

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多