2015-07-02 83 views
1

直質疑,我現在有一個SurfaceView裏面RelativeLayout如下:TranslateAnimation用的RelativeLayout和SurfaceView

<RelativeLayout 
    android:id="@+id/surfaceframe" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#FF000000" 
    android:visibility="visible" > 

    <SurfaceView 
     android:id="@+id/surface" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:visibility="visible" /> 
</RelativeLayout> 

我有一個要求,使RelativeLayoutSurfaceView對待着。簡單。

mPlayerFrame.setTranslation(distance); 

mPlayerFrame對於RelativeLayout.

可變不過,我也有支持的API級別10.客戶堅持這樣做。在瀏覽這裏和其他地方後,我想出了這段代碼。

TranslateAnimation anim = new TranslateAnimation(0,0,distance,distance); 
anim.setFillAfter(true); 
anim.setDuration(0); 
mPlayerFrame.startAnimation(anim); 

與上面的代碼,我看得出來,mPlayerFrame移動,但回放(mPlayerViewSurfaceView)顯然並沒有移動。

到目前爲止,我已經試過如下:

  • 設置的動畫mPlayerView

    mPlayerView.startAnimation(anim); 
    
  • 設置offsetTopAndBottom

    ​​

    它不使用這一招,但在遠遠高於其中的速率mPlayerFrame正在移動。

所以總結一下,我有一個SurfaceViewRelativeLayout,我想其SurfaceView孩子身邊待着這個RelativeLayout。使用API​​級別11+很容易實現,但我也必須支持API Level 10。

謝謝

回答

2

如果你有困難的老動畫框架,你可以用偉大的圖書館是添加API11 ObjectAnimator的兼容性,舊的Android平臺:

nineoldandroids

有是這個圖書館和新圖書館之間的一些區別,尤其是新圖書館實際將對象移動到新位置,圖書館只是顯示它的圖像,所以我建議你你根據API級別分割你的代碼。

+0

嘿,太棒了!有用。這是一個遺留項目,所以我沒有想到它包含九個Android。驚喜地看到它:) –