2010-11-11 22 views
20

Próbuję zaimplementować animację animacji "hiperprzestrzeni" opisaną pod adresem http://developer.android.com/guide/topics/resources/animation-resource.html ("Zasoby animacji") - jednak nie działa ona tak, jak napisano. Po uruchomieniu aplikacji, po prostu pojawia się pusty widok poniżej paska tytułu aplikacji. Co ja robię źle?Przykład animacji prostej animacji

Na przykład, oto mój kod. Utworzyłem RES/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <scale 
     android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
     android:fromXScale="1.0" 
     android:toXScale="1.4" 
     android:fromYScale="1.0" 
     android:toYScale="0.6" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:fillAfter="false" 
     android:duration="700" /> 
    <set 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:startOffset="700"> 
     <scale 
      android:fromXScale="1.4" 
      android:toXScale="0.0" 
      android:fromYScale="0.6" 
      android:toYScale="0.0" 
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:duration="400" /> 
     <rotate 
      android:fromDegrees="0" 
      android:toDegrees="-45" 
      android:toYScale="0.0" 
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:duration="400" /> 
    </set> 
</set> 

Ja również stworzył Układ/main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" 
    /> 
<ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView> 

</LinearLayout> 

Wreszcie mam działalność:

package com.tomoreilly.geology; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.ImageView; 

public class MainActivity extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     ImageView image = (ImageView) findViewById(R.id.ImageView01); 
     Animation hyperspaceJump = 
      AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump); 
     image.startAnimation(hyperspaceJump); 
    } 
} 

Jednak nie widzę animacji po uruchomieniu aplikacji. Czy brakuje mi pewnych szczegółów, których nie ma w przykładzie "Zasoby animacji"?

Dzięki Tom

Odpowiedz

-1

Chyba ViewFlipper jest wymagane. Ponieważ gdy chcesz animacji między animacjami, potrzebujesz ViewFlipper do animacji.

wykonaj następujące czynności. Chyba rozwiązuję problem.

Utwórz nowy plik XML i dodać kartę ViewFlipper w nim ...

użycie zawierać zakładkę zawierać wszystkie pozostałe układ, gdy chcesz zrobić animację.

i niż użyć następującego kodu

flipper = (ViewFlipper) findViewById(R.id.flipper); 

Button button1 = (Button) findViewById(R.id.Button01); // Button in one activity 

Button button2 = (Button) findViewById(R.id.Button02); // Button in second activity 

// Other Methods 

private Animation inFromRightAnimation() { 

     // Animation inFromRight = new TranslateAnimation(
     /* 
     * Animation inFromRight = new ScaleAnimation(
     * Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 
     * 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
     * Animation.RELATIVE_TO_PARENT, 0.0f); 
     */ 
     Animation inFromRight = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 

     inFromRight.setDuration(500); 
     inFromRight.setInterpolator(new AccelerateInterpolator()); 
     return inFromRight; 
    } 

    private Animation outToLeftAnimation() { 
     // Animation outtoLeft = new TranslateAnimation(
     /* 
     * Animation outtoLeft = new 
     * ScaleAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, 
     * Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 
     * 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); 
     */ 
     Animation outtoLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 
     outtoLeft.setDuration(500); 
     outtoLeft.setInterpolator(new AccelerateInterpolator()); 
     return outtoLeft; 
    } 

    private Animation inFromLeftAnimation() { 
     // Animation inFromLeft = new TranslateAnimation(
     /* 
     * Animation inFromLeft = new 
     * ScaleAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, 
     * Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 
     * 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); 
     */ 
     Animation inFromLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 
     inFromLeft.setDuration(500); 
     inFromLeft.setInterpolator(new AccelerateInterpolator()); 
     return inFromLeft; 
    } 

    private Animation outToRightAnimation() { 
     // Animation outtoRight = new TranslateAnimation(
     /* 
     * Animation outtoRight = new 
     * ScaleAnimation(Animation.RELATIVE_TO_PARENT, 0.0f, 
     * Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 
     * 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f); 
     */ 
     Animation outtoRight = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 
     outtoRight.setDuration(500); 
     outtoRight.setInterpolator(new AccelerateInterpolator()); 
     return outtoRight; 
    } 
+0

dlaczego skopiować pasty powyżej odpowiedź tutaj? – Sameer

5

Twój ImageView musi mieć źródło zdefiniowane zarówno w formacie XML lub swojej działalności.

XML:

<ImageView android:id="@+id/ImageView01" 
    android:src="@drawable/someimage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
</ImageView> 

aktywny:

ImageView image = (ImageView) findViewById(R.id.ImageView01); 
image.setImageResource(R.drawable.some_image); 
-1
package com.example; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.animation.AccelerateInterpolator; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.view.animation.TranslateAnimation; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ViewFlipper; 

public class TeeenAni extends Activity { 

ViewFlipper flipper; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ImageView image = (ImageView) findViewById(R.id.ImageView01); 
    Animation hyperspaceJump = 
    AnimationUtils.loadAnimation(this, R.anim.); 
    image.startAnimation(hyperspaceJump); 
    flipper = (ViewFlipper) findViewById(R.anim.hyperspace_jump); 

    Button button1 = (Button) findViewById(R.id.Button01); 

    Button button2 = (Button) findViewById(R.id.Button02); 
} 
    private Animation inFromRightAnimation() { 


     Animation inFromRight = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 

     inFromRight.setDuration(500); 
     inFromRight.setInterpolator(new AccelerateInterpolator()); 
     return inFromRight; 
    } 

    private Animation outToLeftAnimation() { 

     Animation outtoLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 
     outtoLeft.setDuration(500); 
     outtoLeft.setInterpolator(new AccelerateInterpolator()); 
     return outtoLeft; 
    } 

    private Animation inFromLeftAnimation() { 

     Animation inFromLeft = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 
     inFromLeft.setDuration(500); 
     inFromLeft.setInterpolator(new AccelerateInterpolator()); 
     return inFromLeft; 
    } 

    private Animation outToRightAnimation() { 

     Animation outtoRight = new TranslateAnimation(
       Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF, 
       0.0f, Animation.RELATIVE_TO_SELF, -1.0f, 
       Animation.RELATIVE_TO_SELF, 0.0f); 
     outtoRight.setDuration(500); 
     outtoRight.setInterpolator(new AccelerateInterpolator()); 
     return outtoRight; 
    } 

[R.anim.hyperspace_jump] [1] }

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" 
/> 
<ImageView android:id="@+id/ImageView01" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
</ImageView> 

<ViewFlipper android:id="@+id/details" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"/> 

<Button android:id="@+id/Button01" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="Home"></Button> 
<Button android:id="@+id/Button02" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content" 
android:text="Gallary"></Button> 

+4

Proszę dodać więcej substancji do swojej odpowiedzi niż odrobinę kodu. Dodaj uzasadnienie, w jaki sposób i dlaczego ten kod rozwiązuje problem. – Matsemann

11

enter image description here

Aby dodać inną odpowiedź, można również spróbować Universal Tween Engine animować Android UI. Rzeczywiście, animacja, która wymaga sporo linie w swoim formacie XML, by opisać tak:

Timeline.createSequence() 
    // First, set your pivot (Tween.set() works instantly) 
    .push(Tween.set(image, ViewAccessor.PIVOT_XY).target(0.5f, 0.5f)) 

    // Then, animate your scale and rotation as you want 
    .push(Tween.to(image, ViewAccessor.SCALE_XY, 0.7f).target(1.4f, 0.6f)) 
    .beginParallel() 
     .push(Tween.to(image, ViewAccessor.SCALE_XY, 0.4f).target(0, 0)) 
     .push(Tween.to(image, ViewAccessor.ROTATION, 0.4f).target(-45)) 
    .end() 

    // Finally, start the animation! 
    .start(); 

To może być bardziej czytelne, gdy masz duży zestaw działań do sekwencji.Silnik jest silnie zoptymalizowany pod kątem Androida, a zwłaszcza gier, i nie przydziela niczego, aby zapewnić najlepszą wydajność.

Jest całkowicie open-source, mocno udokumentowane i wydane z licencją Apache-2.

można dać Android demo spróbować, jeśli chcesz :)

+0

Przy okazji jest to niesamowita biblioteka, która pięknie działa do dziś. – alvi