kgr*_*gen 6 android android-animation android-fragments
我试图在Android中的片段中滑动.过渡和滑动按预期工作,它正好滑动到我想要的位置.但是,在视图到位之前,有一个白色背景,视图将位于其最终位置.它就像为它分配了空间.但是我想让它滑过我当前的视图,所以没有显示白色背景.有什么想法吗?我在res/anim中使用带有xml文件的view animator.
这是一个小代码:
<?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" />
Run Code Online (Sandbox Code Playgroud)
android.support.v4.app.FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_down, 0);
fragmentTransaction.show(fragmentToSlideIn);
fragmentTransaction.commit();
Run Code Online (Sandbox Code Playgroud)
那么,为什么视图的最终位置在达到该位置之前会有白色背景?
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);
}
Run Code Online (Sandbox Code Playgroud)
布局:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1108 次 |
| 最近记录: |