White background when animating fragments in android

I am trying to offset a fragment in Android. The transition and gliding movement work as expected, it glides exactly where I want. But before the presentation is in place, there is a white background where the view will be in the final position. It is like he was given space. But I want it to slide over my current views, so the white background is not shown. Any ideas on this? I am using a view animator with an xml file in res / anim.

Here is a little code:

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

So, why is there a white background in the final position of the view before it reaches that position?

+6
source share
1 answer

http://developer.android.com/guide/topics/graphics/prop-animation.html#object-animator You should use objectAnimator, here is an example of a code that slide from right to left:

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

Markup:

 <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> 
0
source

Source: https://habr.com/ru/post/918477/


All Articles