2012-06-19 13 views
6

Sto provando a inserire un frammento in Android. Il passaggio e lo scorrimento funziona come previsto, scorre esattamente dove lo voglio. Ma, prima che la vista sia a posto, c'è uno sfondo bianco in cui la vista si troverà nella sua posizione finale. È come se gli fosse stato assegnato spazio. Ma voglio che scivoli sulle mie attuali viste, quindi lo sfondo bianco non viene mostrato. Qualche idea su questo? Sto usando l'animatore della vista con il file xml in res/anim.Sfondo bianco durante l'animazione di frammenti in Android

Ecco un po 'di codice:

<?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(); 

Allora, perché c'è uno sfondo bianco sulla posizione finale della vista, prima di aver raggiunto quella posizione?

+0

u trovato soluzione per questo? anche io sto affrontando lo stesso problema – Mohit

risposta

0

http://developer.android.com/guide/topics/graphics/prop-animation.html#object-animator Si dovrebbe usare objectAnimator, qui è il codice di esempio che scivola frammento da destra a sinistra:

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); 
     } 

Disposizione:

<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

Nota che [ObjectAnimator] (http://developer.android.com/reference/android/animation/ObjectAnimator.html) è stato aggiunto solo in ** API Livello 11 **. – jenzz

+0

Hai trovato una soluzione per questo? Ho lo stesso problema con le viste normali. –

Problemi correlati