2012-10-04 30 views
2

我正在爲活動中的視圖運行過渡動畫,以便從屏幕頂部到達底部。這是在屏幕標題視圖的頂部。我如何才能將動畫僅應用於視圖中(僅針對兒童)還是從特定的Y或X位置應用?如何剪輯Transition Animation以僅在Child視圖中繪製?

我使用下面的代碼

XML代碼

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> 
<translate android:fromYDelta="-100%p" android:toYDelta="0" android:duration="500" /> 
</set> 

Java代碼的

Animation in = AnimationUtils.loadAnimation(_activity, R.anim.in_from_top); 
view.setAnimation(in); 

現在,這個畫面從屏幕頂部的到來。我想要在特定的X,Y點而不是屏幕頂部開始動畫。動畫視圖出現在活動標題之上,這是我的要求的一個缺陷。

+0

請詳細說明。 –

+0

我改變了我的問題。 – uvrpavan

+0

任何一個迴應我的問題...... – uvrpavan

回答

0

您將需要創建一個自定義動畫類是這樣的:

public class ExpandAnimation extends Animation { 
private View mAnimatedView; 
private LayoutParams mViewLayoutParams; 
private int mMarginStart, mMarginEnd; 
private boolean mIsVisibleAfter = false; 
private boolean mWasEndedAlready = false; 

/** 
* Initialize the animation 
* 
* @param view 
*   The layout we want to animate 
* 
* @param duration 
*   The duration of the animation, in ms 
*/ 
public ExpandAnimation(View view, int duration) { 
    setDuration(duration); 
    mAnimatedView = view; 
    mViewLayoutParams = (LayoutParams) view.getLayoutParams(); 
    mIsVisibleAfter = (mViewLayoutParams.bottomMargin == 0); 
    mMarginStart = mViewLayoutParams.bottomMargin; 
    mMarginEnd = (mMarginStart == 0 ? (0 - view.getHeight()) : 0); 
    view.setVisibility(View.VISIBLE); 
} 

@Override 
protected void applyTransformation(float interpolatedTime, Transformation t) { 
    super.applyTransformation(interpolatedTime, t); 

    if (interpolatedTime < 0.5f) { 
     mViewLayoutParams.bottomMargin = mMarginStart + (int) ((mMarginEnd - mMarginStart) * interpolatedTime); 
     mAnimatedView.requestLayout(); 
    } else if (!mWasEndedAlready) { 
     mViewLayoutParams.bottomMargin = mMarginEnd; 
     mAnimatedView.requestLayout(); 

     if (mIsVisibleAfter) { 
      mAnimatedView.setVisibility(View.GONE); 
     } 
     mWasEndedAlready = true; 
    } 
} 

}

,然後申請你想上哪兒的X,Y座標此動畫。

假設假設您在某個x,y座標上有一個按鈕,並且在它的點擊上我們爲一個視圖創建了一個動畫,然後將其向後滾動。你將不得不做這樣的事情:

private View previous = null; 
private void doTransformation() { 
    if (previous != null) { 
     ((LinearLayout.LayoutParams) previous.getLayoutParams()).bottomMargin = -200; 
     ExpandAnimation anim = new ExpandAnimation(previous, 300); 
     previous.startAnimation(anim); 
     previous = null; 
    } else { 
     View yourlayout= findViewById(R.id.your_layout); 
     ExpandAnimation anim = new ExpandAnimation(yourLayout, 300); 
     detailLayout.startAnimation(anim); 
     previous = yourLayout; 
    } 
} 
1

如果已經添加了兩個兒童的單親發生那麼這個問題。將這些子項添加到另一個佈局,然後將此佈局添加到實際佈局。這將解決您的問題。

0

你可以嘗試從Java代碼中的動畫只

Animation animation1=new TranslateAnimation(0.0f, 0.0f, 10.0f, 250.0f); 
animation1.setDuration(5000); 
view.startAnimation(animation1); 

,你可以設置你的X和我在上面的代碼所做的Y座標TranslateAnimation(fromX, toX, fromY, toY)