2011-02-11 60 views
7

我試圖使用Android的動畫框架讓我的ImageView以菱形圖案移動。這裏是我的animation.xml:Android動畫XML問題

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
<translate 
    android:fromXDelta="40%p" android:toXDelta="90%p" 
    android:fromYDelta="10%p" android:toYDelta="40%p" 
    android:duration="500" android:startOffset="0"/> 
<translate 
    android:fromXDelta="90%p" android:toXDelta="40%p" 
    android:fromYDelta="40%p" android:toYDelta="90%p" 
    android:duration="500" android:startOffset="500"/> 
<translate 
    android:fromXDelta="40%p" android:toXDelta="10%p" 
    android:fromYDelta="90%p" android:toYDelta="40%p" 
    android:duration="500" android:startOffset="1000"/> 
<translate 
    android:fromXDelta="10%p" android:toXDelta="40%p" 
    android:fromYDelta="40%p" android:toYDelta="10%p" 
    android:duration="500" android:startOffset="1500"/> 
</set> 

我的佈局:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> 
    <ImageView 
     android:id="@+id/img" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/icon"/> 
</FrameLayout> 

而且我在onStart:

protected void onStart() { 
    super.onStart(); 

    ImageView img = (ImageView)findViewById(R.id.img); 
    Animation a = AnimationUtils.loadAnimation(this, R.anim.diamond); 
    img.startAnimation(a); 
} 

當我開始了我的申請,我看是2秒的黑屏,然後我的圖像彈出到屏幕的左上角。如果我刪除除了其中一個翻譯動畫之外的所有內容,我將看到圖像以對角線移動。

我寧願使用XML來定義動畫而不是Java。

有沒有人有任何見解我如何看到整個動畫?

-Dan

+0

它似乎與使用「%p」有關。如果我將「%p」更改爲「%」,則整個動畫都可以工作,但現在只限於屏幕的一小部分。根據文檔「%」與對象有關係,「%p」與對象的父對象相關,這正是我想要的。這就解釋了爲什麼它只是將動畫製作成小方塊。 – Dan 2011-02-11 19:00:41

+0

爲了進一步闡明,我想使用XML來定義我的動畫相對於我的動畫的ImageView的父級。我不會接受任何說框架被破壞的答案,我也不會接受一個答案,要求動畫在Java中定義。 – Dan 2011-02-15 13:32:06

回答

15

動畫屬性是相對於他們在哪裏時,他們開始。這可能是更接近很多你想要的東西:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
<translate 
    android:fromXDelta="40%p" android:toXDelta="90%p" 
    android:fromYDelta="10%p" android:toYDelta="40%p" 
    android:duration="500" android:startOffset="0"/> 
<translate 
    android:fromXDelta="0%p" android:toXDelta="-50%p" 
    android:fromYDelta="0%p" android:toYDelta="50%p" 
    android:duration="500" android:startOffset="500"/> 
<translate 
    android:fromXDelta="0%p" android:toXDelta="-30%p" 
    android:fromYDelta="0%p" android:toYDelta="-50%p" 
    android:duration="500" android:startOffset="1000"/> 
<translate 
    android:fromXDelta="0%p" android:toXDelta="30%p" 
    android:fromYDelta="0%p" android:toYDelta="-30%p" 
    android:duration="500" android:startOffset="1500"/> 
</set> 
1

試試這個:

Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.diamond); 
findViewById(R.id.img).setAnimation(anim); 
anim.start(); 

你也應該可能改變動畫加載一個接一個。我認爲你創建的這套設置會嘗試一次播放所有的動畫,而這樣做效果不佳。

使用像這樣的animationListener:

anim.setAnimationListener(new Animation.AnimationListener() { 

     public void onAnimationStart(Animation animation) { 
     } 

     public void onAnimationEnd(Animation animation) { 
      Animation anim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.diamond2); 
      findViewById(R.id.img).setAnimation(anim); 
      anim.start(); 
     } 

     public void onAnimationRepeat(Animation animation) { 
     } 
    }); 
+0

這對我沒有任何影響。根據文檔(http://developer.android.com/guide/topics/resources/animation-resource.html),我應該能夠指定一個動畫的startOffset,它應該允許我將動畫鏈接到我展示的方式。 – Dan 2011-02-11 14:43:56

1

使用這一個它的作品,我HVE測試它

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
    <translate 
     android:fromXDelta="40%p" android:toXDelta="90%p" 
     android:fromYDelta="10%p" android:toYDelta="40%p" 
     android:duration="500" android:startOffset="0" 
     /> 
    <translate 
     android:fromXDelta="0%p" android:toXDelta="-40%p" 
     android:fromYDelta="0%p" android:toYDelta="40%p" 
     android:duration="500" android:startOffset="500"/> 
    <translate 
     android:fromXDelta="0%p" android:toXDelta="-40%p" 
     android:fromYDelta="0%p" android:toYDelta="-40%p" 
     android:duration="500" android:startOffset="1000"/> 
    <translate 
     android:fromXDelta="0%p" android:toXDelta="40%p" 
     android:fromYDelta="0%p" android:toYDelta="-40%p" 
     android:duration="500" android:startOffset="1500"/> 
    </set> 
0

使用此動畫的XML代碼。它的工作原理:

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="true"> 
<translate 
    android:fromXDelta="40%" android:toXDelta="90%" 
    android:fromYDelta="10%" android:toYDelta="40%" 
    android:duration="500" android:startOffset="0"/> 
<translate 
    android:fromXDelta="90%" android:toXDelta="40%" 
    android:fromYDelta="40%" android:toYDelta="90%" 
    android:duration="500" android:startOffset="500"/> 
<translate 
    android:fromXDelta="40%" android:toXDelta="10%" 
    android:fromYDelta="90%" android:toYDelta="40%" 
    android:duration="500" android:startOffset="1000"/> 
<translate 
    android:fromXDelta="10%" android:toXDelta="40%" 
    android:fromYDelta="40%" android:toYDelta="10%" 
    android:duration="500" android:startOffset="1500"/> 
</set>