2012-06-19 6 views
6

मैं एंड्रॉइड में एक टुकड़े में स्लाइड करने की कोशिश कर रहा हूं। संक्रमण और स्लाइडिंग अपेक्षित काम करता है, यह बिल्कुल ठीक है जहां मैं इसे चाहता हूं। लेकिन, दृश्य देखने से पहले, एक सफेद पृष्ठभूमि है जहां दृश्य अपनी अंतिम स्थिति में होगा। ऐसा लगता है कि इसके लिए जगह आवंटित की गई है। लेकिन मैं इसे अपने वर्तमान विचारों पर स्लाइड करना चाहता हूं, इसलिए सफेद पृष्ठभूमि दिखाई नहीं दे रही है। इस पर कोई विचार? मैं res/anim में xml फ़ाइल के साथ व्यू एनिमेटर का उपयोग कर रहा हूं।एंड्रॉइड में टुकड़े एनिमेट करते समय सफेद पृष्ठभूमि

<?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

ध्यान दें कि [ऑब्जेक्टएनिमीटर] (http://developer.android.com/reference/android/animation/ObjectAnimator.html) केवल ** API स्तर 11 ** में जोड़ा गया था। – jenzz

+0

क्या आपको इसके लिए कोई समाधान मिला? मुझे सामान्य विचारों के साथ एक ही समस्या है। –