2014-05-05 99 views
1

我正試圖在圖像視圖上從底部到屏幕中間執行翻譯動畫。完成動畫後,我希望圖像視圖留在那裏。我不想要setFillAfter(true),因爲我想要更新imageview的實際位置。在動畫之後移動圖像查看(更新位置)

我現在通過2個圖像視圖(一個在動畫開始處,一個在結束處)進行,我使用setVisibility來實現此目的。這是做事的正確方法嗎?下面是我使用的代碼:

<ImageView 
    android:id="@+id/ivStart" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:background="@drawable/typer_step_1" 
    android:gravity="center" 
    /> 



<ImageView 
    android:id="@+id/ivMiddle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/typer_step_1" 
    android:gravity="center" 
    android:visibility="invisible" 
    />  








    TranslateAnimation translate = new TranslateAnimation(0, mDestLoc1[0]-mSrcLoc1[0], 0, mDestLoc1[1]-mSrcLoc1[1]);     
translate.setDuration(2000); 
translate.setAnimationListener(new AnimationListener(){ 

    @Override 
    public void onAnimationStart(Animation animation) {} 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     ivMiddle.setVisibility(View.VISIBLE) 
         ivStart.setVisibility(View.INVISIBLE) 


    } 

    @Override 
    public void onAnimationRepeat(Animation animation) {} 

}); 

ivStart.startAnimation(translate); 
+0

可能的重複[Android翻譯動畫 - 永久移動使用AnimationListener查看新位置](http://stackoverflow.com/questions/19016674/android-translate-animation-permanently-move-view-to-new-position -using-animat) – JiTHiN

+1

,您應該在動畫之前將您正在動畫的ImageView放置在您想要的位置。在開始播放動畫時,請將其翻譯爲看起來來自您希望它來自的位置。 – josephus

+0

@JosephusVillarey嗯,好建議! – Snake

回答

2

然後你必須爲你的視圖設置新的LayoutParams這是動畫。當動畫完成後,在您的onAnimationEnd部分中,設置您的View的新位置。

 TranslateAnimation translate = new TranslateAnimation(0, mDestLoc1[0]-mSrcLoc1[0], 0, mDestLoc1[1]-mSrcLoc1[1]);     
    translate.setDuration(2000); 
    translate.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationStart(Animation animation) {} 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      RelativeLayout.LayoutParams par = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
      par.topMargin = mDestLoc1[1]-mSrcLoc1[1]; 
      par.leftMargin = mDestLoc1[0]-mSrcLoc1[0]; 
      view.setLayoutParams(par);    
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 

    }); 

    view.startAnimation(translate); 
+0

嗯。好的建議,我會嘗試 – Snake

-1

啓動動畫 translate.setFillAfter(true);

+1

請閱讀我的問題。我特別說我不想使用它,因爲它不會改變位置,它只是改變「宇宙位置」 – Snake

+0

它是關於當動畫完成時移動視圖(更新位置),所以如果你想移動再次查看,從更新的位置開始,而不是最初的位置。 – sunlover3

0

如果你想在圖像視圖的實際起始位置,你可以在animationStart時間得到它,你可以前添加此行使用setFillAfter(true)setFillAfter(true)將在動畫結束後更新位置。

如果您需要新的職位,您可以使用setFilter(true)。如果你還沒有準備好使用setFillAfter(true)(如果你需要更舊的位置),那麼你有兩個圖像視圖做了正確的事情。但最好是獲得animationStart的位置並使用setFillAfter(true)

+1

請閱讀我的問題。我特別說我不想使用它,因爲它不會改變位置,它只是改變「宇宙位置」......或者你錯過了我的觀點 – Snake

+0

你可以關注這個http://graphics-geek.blogspot.in /2011/08/mysterious-behavior-of-fillbefore.html 鏈接獲取標誌fillAfter,fillBefore和fillEnabled。將所有三個標誌設置爲true將按照我的設想工作。 – Sripathi

0

蛇用我的代碼這個會幫助你,

//Call this in your onCreate 

private void StartAnimationsDtoU() 
{ 
    Animation anim = AnimationUtils.loadAnimation(this, R.anim.alphadtou); 
    anim.reset(); 
    RelativeLayout l=(RelativeLayout) findViewById(R.id.lin_lay); 
    l.clearAnimation(); 
    l.startAnimation(anim); 
    anim = AnimationUtils.loadAnimation(this, R.anim.translate); 
    anim.reset(); 
    ImageView iv = (ImageView) findViewById(R.id.logo); 
    iv.setImageResource(R.drawable.earth); 
    iv.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 
    iv.clearAnimation(); 
    iv.startAnimation(anim); 

} 

這是你與從會向下移動到屏幕的中間的圖像線性佈局。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/lin_lay"> 

<ImageView 
    android:id="@+id/logo" 
    android:layout_width="130dp" 
    android:layout_height="130dp" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/earth" /> 

,這會是翻譯即translate.xml您的xml文件...

<set xmlns:android="http://schemas.android.com/apk/res/android"><translate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="0%" 
android:toXDelta="0%" 
android:fromYDelta="200%" 
android:toYDelta="0%" 
android:duration="4000" 
android:zAdjustment="top" /></set> 

,這會成爲你下到上alphadtou.xml ...

<?xml version="1.0" encoding="utf-8"?><alpha 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromAlpha="0.0" 
android:toAlpha="1.0" 
android:duration="1000" /> 

並且還覆蓋onAttachedToWindow方法像這樣...

@Override 
public void onAttachedToWindow() 
{ 
    // TODO Auto-generated method stub 
    super.onAttachedToWindow(); 
    Window window = getWindow(); 
    window.setFormat(PixelFormat.RGBA_8888); 
} 

希望這會幫助你很多。

+0

謝謝,但我沒有看到圖像視圖永久改變位置的代碼。這隻會翻譯圖像 – Snake