- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在测试的 View 有动画,当我用 Robolectric 测试时它似乎出错了。动画是一个简单的滑动,使用 Nineoldandroids 以实现兼容性。在 Robolectric 之外一切正常,但是我的单元测试因空指针而崩溃:
10:34:35.419 [DEBUG] [TestEventLogger] java.lang.NullPointerException
10:34:35.419 [DEBUG] [TestEventLogger] at com.nineoldandroids.view.animation.AnimatorProxy.applyTransformation(AnimatorProxy.java:316)
10:34:35.419 [DEBUG] [TestEventLogger] at android.view.animation.Animation.getTransformation(Animation.java:870)
10:34:35.420 [DEBUG] [TestEventLogger] at org.robolectric.shadows.ShadowView$2.run(ShadowView.java:492)
10:34:35.420 [DEBUG] [TestEventLogger] at org.robolectric.util.Scheduler.runOrQueueRunnable(Scheduler.java:218)
10:34:35.420 [DEBUG] [TestEventLogger] at org.robolectric.util.Scheduler.postDelayed(Scheduler.java:73)
10:34:35.421 [DEBUG] [TestEventLogger] at org.robolectric.shadows.ShadowChoreographer.postCallbackDelayed(ShadowChoreographer.java:44)
10:34:35.421 [DEBUG] [TestEventLogger] at android.view.Choreographer.postCallbackDelayed(Choreographer.java)
10:34:35.427 [DEBUG] [TestEventLogger] at org.robolectric.shadows.ShadowView.setAnimation(ShadowView.java:487)
10:34:35.429 [DEBUG] [TestEventLogger] at android.view.View.setAnimation(View.java)
10:34:35.431 [DEBUG] [TestEventLogger] at com.nineoldandroids.view.animation.AnimatorProxy.<init>(AnimatorProxy.java:66)
10:34:35.432 [DEBUG] [TestEventLogger] at com.nineoldandroids.view.animation.AnimatorProxy.wrap(AnimatorProxy.java:38)
10:34:35.432 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.PreHoneycombCompat$14.get(PreHoneycombCompat.java:161)
10:34:35.432 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.PreHoneycombCompat$14.get(PreHoneycombCompat.java:153)
10:34:35.432 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:510)
10:34:35.433 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:410)
10:34:35.433 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:538)
10:34:35.433 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.ValueAnimator.start(ValueAnimator.java:928)
10:34:35.433 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.ValueAnimator.start(ValueAnimator.java:951)
10:34:35.433 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.ObjectAnimator.start(ObjectAnimator.java:385)
10:34:35.433 [DEBUG] [TestEventLogger] at com.nineoldandroids.animation.AnimatorSet.start(AnimatorSet.java:502)
如果我在我的代码中添加一个检查以仅将 nineoldandroids 用于 API <11 并且默认情况下使用 android native 动画,测试就可以顺利通过。从 nineoldandroids 源代码中,我可以看到它在这一行上是空指针:
View view = mView.get();
其中 mView 是 mView = new WeakReference<View>(view);
关于如何从测试用例而不是我的应用代码中理想地解决这个问题有什么建议吗?
最佳答案
似乎正在发生的事情是,在 AnimationProxy
完全初始化之前,为列表元素设置动画的 Nineoldandroid 动画由 UI/Main looper 执行。这可能是由于 Robolectric 3 中更好地模拟了 Android 线程架构。
我通过调用解决了这个问题:
ShadowLooper.pauseMainLooper();
将此调用放在任何可以在 Nineoldandroids 中启动动画的方法之前。
更新:
这给我带来了更多的麻烦,上面的解决方法对于执行动画的每一段代码都很烦人,所以我 fork 并修复了它,非常小的变化:
https://github.com/apinder/NineOldAndroids/commit/6d399685dc5b3932e3b806d4d7d2f27123e1ca36
关于android - 带有 Robolectric 的 AnimatorProxy 中的 Nineoldandroids NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29966114/
我在我的代码中使用了 android.animation.AnimatorListenerAdapter 类来收听动画。示例: downView.animate().translationX(-mVi
我想在我的项目中使用 nineOldAndroid。我已经下载了项目并导入了库并且工作正常。现在我已将库添加到我的项目中,但出现此错误。 06-17 18:26:33.930: E/AndroidRu
自 2014 年 7 月以来,Jake Wharton 的 NineOldAndroids 动画库已被弃用。我想在我的应用程序中替换它,因为我们现在的目标是 API 16+。 我查看了所有内容,但找不
您好,我正在尝试制作一系列动画,但失败得很惨。它在 4.0 时运行良好,但我使用 nineoldandroid 添加了对 2.2 和 2.3 的支持。它似乎可以工作,但是 AnimatorListen
我使用 NineOldAndroids 2.4.0 动画对象主要是对运动和变换的控制。在 Android 4.0 及更高版本上一切正常,但在以前的版本(2.1、2.3)上,动画元素未获得焦点且不可点击
private void createnewpattern(final String res) { final int width, height; BitmapDrawable im
我正在使用 NineOldAndroid 库来执行动画。动画适用于 API10,应用程序强制关闭。这是我的代码: import static com.nineoldandroids.view.View
我有以下代码,它将图像分成两半并在不同方向为每个部分设置动画: final AnimatorSet mSetAnim = new AnimatorSet(); final Animator topAn
friend .... 我在两个版本之间遇到动画问题...所以我将描述我的应用程序的要求和我面临的问题 1.My由动画组成,动画由viewpager组成。 2.并且该动画必须在2.2等低版本下才能正常
我在哪里可以下载“NineOldAndroids”以及如何在 eclipse 中导入它。当我尝试导入它时,我收到一条消息“找不到要导入的项目”。谁能告诉我如何导入它? 最佳答案 在eclipse 中导
我正在尝试使用 Espresso 测试我的 Activity (HomeActivity),它具有基于 NineOldAndroids 库的重复动画。我按照描述关闭了系统动画 here , 但它没有帮
我想从我的项目中替换 com.nineoldandroids 库的依赖项,并将其替换为 android native 库。 我正在尝试基于这个 http://www.tutecentral.com/a
我想在 ViewGroup 中以“向下滑动”方式添加 View 并以“向上滑动”方式移除 View 。所以我使用了 LayoutTransition.class 但 minSdk 8 不支持它。所以我
我在我的项目中使用了一些库/模块。 在其中两个库中,gradle 中使用了“nineoldandroids”,每个库中都有“-compile 'com.nineoldandroids:library:
我正在使用出色的框架 NineOldAndroids,但我找不到任何东西来设置动画 View 的轴心。具体来说,我正在尝试制作一个 scaleX + scaleY 动画,并在左上角边缘设置一个枢轴,因
我正在尝试移植 http://developer.android.com/training/animation/zoom.html回到 API < 11。 我正在使用 nineoldandroid 库
我添加了 ResideMenu在我的项目中使用它的 gradle 依赖项。但我遇到了这个问题: Error:Execution failed for task ':app:transformClass
我正在使用 Jake Wharton 的 nineoldandroids 库来实现与 Honeycomb 之前的设备兼容的动画。库:http://nineoldandroids.com/ 出于某种原因
我正在使用 NineOldAndroids 的 ObjectAnimators 通过以下代码淡入 Android Map v2 标记: mMarkerSelected = mMap.addMarker
我正在使用 scaleX() 为 ImageView 制作动画。这应该是一个从左到右填充的进度条。它在 API 10、18 和 19 上没有问题。但是在 API 16 上,setPivotX() 方法
我是一名优秀的程序员,十分优秀!