2013-05-16 5 views
0

매우 간단한 작업을 수행해야하는 테스트 활동이 있습니다. 뷰를 부 풀린 다음 ObjectAnimator를 사용하여 화면에서 이동합니다.Android에서 ObjectAnimator에 대한 ActionBarSherlock 및 NineOldAndroids의 차이점 <11

NineOldAndroids 라이브러리를 사용하면 모든 장치 (OS 2.2 이상 - OS4.2)에서 완벽하게 작동합니다.

그러나 라이브러리를 ActionBarSherlock (동일한 NineOldAndroid 라이브러리가 있어야 함)로 변경하면 OS 3.x 이상에서 작동하지만 2.2 및 2.3 장치에서는 작동하지 않습니다. 이 경우 속성을 찾을 수 없으며 Null Pointer 예외가 발생합니다 (아래 참조).

누구나 동일한 문제가 있습니까? 해결 방법이 있습니까? 아니면 실제로 문제를 해결하기 위해 두 라이브러리 (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(); 

} 
} 

(I는 "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 

답변

0

프로젝트의 lib 디렉토리 또는 항아리뿐만 아니라 ActionBarSherlock의 nineoldandroids를 추가해야합니다.

현재 귀하의 코드는 클라이언트 개발자가 실제로 사용하지 않는 9oldandroids의 내부 액션 바를 처리하는 버전을 사용하고 있습니다. 동일한 프로젝트에서 nineoldandroids와 actionbarsherlock을 모두 사용할 수 있습니다.

원하는 작업에 대해 ViewHelper.setTranslationX() 및 ViewHelper.setTranslationY() 메서드를 사용하는 것이 좋습니다.