2012-06-19 23 views
6

我試圖在Android中的片段中滑動。過渡和滑動按預期工作,它滑到我想要的地方。但是,在視圖到位之前,視圖將處於其最終位置的是白色背景。它就像它已被分配空間。但我想讓它滑過我目前的觀點,所以白色背景沒有顯示出來。對此有何想法?我在res/anim中使用了帶有xml文件的視圖動畫器。在Android中動畫片段時的白色背景

這裏是一個小代碼:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

<translate 
    android:duration="100" 
    android:fromYDelta="100%" 
    android:toYDelta="0" /> 

<alpha 
    android:duration="100" 
    android:fromAlpha="0.0" 
    android:toAlpha="1.0" /> 

android.support.v4.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 

fragmentTransaction.setCustomAnimations(R.anim.slide_in_down, 0); 
fragmentTransaction.show(fragmentToSlideIn); 
fragmentTransaction.commit(); 

那麼,爲什麼會出現在白色背景上的視圖的最終位置,它已經到達那個位置前?

+0

ü找到解決方案呢?即使我面臨同樣的問題 – Mohit

回答

0

http://developer.android.com/guide/topics/graphics/prop-animation.html#object-animator 你應該使用objectAnimator,這裏是滑片段由右至左的示例代碼:

private View mPanel1; 
    private View mPanel2; 
    private View mLayout; 
    boolean isCollapsed; 
    private int LayoutWidth; 
    private int Panel1Width; 
    private int Panel2Width; 
    private static final TimeInterpolator sCollapseInterpolator = new DecelerateInterpolator(2.5F); 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mLayout = findViewById(R.id.linearlayout); 
    mPanel1 = findViewById(R.id.fragment1); 
    mPanel2 = findViewById(R.id.fragment2); 
} 
    @Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
     // Measure width of layout and mPanel1 which is FragmentList. This is needed for ObjectAnimator 
     // to create transition animation 
     Display display = getWindowManager().getDefaultDisplay(); 
     Point size = new Point(); 
     display.getSize(size); 
     LayoutWidth = size.x; 
     Panel1Width = mPanel1.getWidth(); 
     Panel2Width = mPanel2.getWidth(); 

    } 
    public void slide(){ 
     if(isCollapsed){ 
         PropertyValuesHolder[] arrayOfPropertyValuesHolder = new PropertyValuesHolder[2]; 
         arrayOfPropertyValuesHolder[0] = PropertyValuesHolder.ofInt("PanelLeft", Panel1Width * -1, 0); 
         arrayOfPropertyValuesHolder[1] = PropertyValuesHolder.ofInt("Panel2W", LayoutWidth, LayoutWidth - Panel1Width); 
         ObjectAnimator localObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(this, arrayOfPropertyValuesHolder).setDuration(400); 
         localObjectAnimator.setInterpolator(sCollapseInterpolator); 
         localObjectAnimator.start(); 
        } 
        else{ 
         PropertyValuesHolder[] arrayOfPropertyValuesHolder = new PropertyValuesHolder[2]; 
         arrayOfPropertyValuesHolder[0] = PropertyValuesHolder.ofInt("PanelLeft", 0, Panel1Width/-1); 
         arrayOfPropertyValuesHolder[1] = PropertyValuesHolder.ofInt("Panel2W", LayoutWidth - Panel1Width, LayoutWidth); 
         ObjectAnimator localObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(this, arrayOfPropertyValuesHolder).setDuration(400); 
         localObjectAnimator.setInterpolator(sCollapseInterpolator); 
         localObjectAnimator.start(); 
        } 
        isCollapsed = !isCollapsed; 
    } 

     public int getPanelLeft() { 
      return ((ViewGroup.MarginLayoutParams) mLayout.getLayoutParams()).leftMargin; 
     } 

     public void setPanelLeft(int paramInt) { 
      ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mLayout.getLayoutParams(); 
      lp.leftMargin = paramInt; 
      mLayout.setLayoutParams(lp); 
     } 

     public int getPanel2W() { 
      return ((ViewGroup.MarginLayoutParams) mPanel2.getLayoutParams()).width; 
     } 

     public void setPanel2W(int paramInt) { 
      ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mPanel2.getLayoutParams(); 
      lp.width = paramInt; 
      mPanel2.setLayoutParams(lp); 
     } 

佈局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/linearlayout" > 

    <fragment 
     android:id="@+id/fragment1" 
     android:name="package.your.fragment1" 
     android:layout_width="320dp" 
     android:layout_height="match_parent"/> 

<fragment 
     android:id="@+id/fragment2" 
     android:name="package.your.fragment2" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

</LinearLayout> 
+1

請注意,僅在** API Level 11 **中添加了[ObjectAnimator](http://developer.android.com/reference/android/animation/ObjectAnimator.html)。 – jenzz

+0

您是否找到了解決方案?我有與普通視圖相同的問題。 –