Android上的ObjectAnimator的ActionBarSherlock和NineOldAndroids之间的区别< 11

时间:2013-05-16 18:38:02

标签: actionbarsherlock objectanimator nineoldandroids

我有一个测试活动应该做非常简单的任务:给视图充气,然后用ObjectAnimator在屏幕上移动它。

如果我使用NineOldAndroids库,这适用于所有设备(OS 2.2+ - OS4.2)。

但是,如果我将库更改为ActionBarSherlock(假设其中包含相同的NineOldAndroid库),则它适用于OS 3.x及更高版本,但它不适用于2.2和2.3设备。在这种情况下,它找不到属性并抛出空指针异常(如下所示)。

有人有同样的问题吗?有没有解决方法,或者我实际上已经使用了两个库(NineOldAndroids和ActionBarSherlock)来解决这个问题?

以下是TestsActivity

public class TestActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    RelativeLayout mainLayout =  (RelativeLayout) findViewById(R.id.main_layout);

    View testView = getLayoutInflater().inflate(R.layout.object_holder, null);

    mainLayout.addView(testView);

    AnimatorSet set = new AnimatorSet();
    set.playTogether(
        ObjectAnimator.ofFloat(testView, "translationX", 100),
        ObjectAnimator.ofFloat(testView, "translationY", 100)
    );
    set.setDuration(0).start();

}
}

(同样的事情发生,如果我用“x”改变“translationX”。)

这是例外(仅当我在2.2和2.3设备上使用库ActionBarSherlock时才会发生这种情况):

05-16 13:24:53.662: E/PropertyValuesHolder(2007): Couldn't find setter property translationX for RelativeLayout with value type float
05-16 13:24:53.662: E/PropertyValuesHolder(2007): RelativeLayout - Couldn't find no-arg method for property translationX: java.lang.NoSuchMethodException: getTranslationX
05-16 13:24:53.662: D/AndroidRuntime(2007): Shutting down VM
05-16 13:24:53.662: W/dalvikvm(2007): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
05-16 13:24:53.672: E/AndroidRuntime(2007): FATAL EXCEPTION: main
05-16 13:24:53.672: E/AndroidRuntime(2007): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testanimator/com.example.testanimator.TestActivity}: java.lang.NullPointerException
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1821)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.ActivityThread.access$1500(ActivityThread.java:132)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.os.Handler.dispatchMessage(Handler.java:99)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.os.Looper.loop(Looper.java:150)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.ActivityThread.main(ActivityThread.java:4263)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at java.lang.reflect.Method.invokeNative(Native Method)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at java.lang.reflect.Method.invoke(Method.java:507)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at dalvik.system.NativeStart.main(Native Method)
05-16 13:24:53.672: E/AndroidRuntime(2007): Caused by: java.lang.NullPointerException
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.PropertyValuesHolder.setupSetterAndGetter(PropertyValuesHolder.java:515)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator.initAnimation(ObjectAnimator.java:386)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.setCurrentPlayTime(ValueAnimator.java:539)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.start(ValueAnimator.java:929)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.ValueAnimator.start(ValueAnimator.java:952)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.ObjectAnimator.start(ObjectAnimator.java:364)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.actionbarsherlock.internal.nineoldandroids.animation.AnimatorSet.start(AnimatorSet.java:501)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at com.example.testanimator.TestActivity.onCreate(TestActivity.java:30)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
05-16 13:24:53.672: E/AndroidRuntime(2007):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
05-16 13:24:53.672: E/AndroidRuntime(2007):     ... 11 more

1 个答案:

答案 0 :(得分:0)

您需要添加九个机器人作为项目库或jar以及actionbarsherlock。

目前,您的代码正在使用内部actionbarsherlock版本的nineoldandroids,这并非真正意味着客户端开发人员使用。您可以在同一个项目中同时使用nineoldandroids和actionbarsherlock。

我建议您使用ViewHelper.setTranslationX()和ViewHelper.setTranslationY()方法来完成您的工作。