2010-11-11 4 views
20

Я пытаюсь реализовать анимацию анимации «гиперпространства», описанную в http://developer.android.com/guide/topics/resources/animation-resource.html («Ресурсы анимации») - однако она не работает так, как написано. Когда я запускаю приложение, я просто получаю пустой вид под панелью заголовков приложений. Что я делаю не так?Пример анимации простой анимации

В примере, вот мой код. Я создал Рез/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> 

Я также создал макет/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> 

Наконец у меня есть активность:

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); 
    } 
} 

Но я не вижу анимации, когда запускаю приложение. Не хватает ли некоторых деталей, которые не рассматриваются в примере «Ресурсы анимации»?

Спасибо, Том

ответ

-1

I Guess ViewFlipper требуется. Потому что, когда вы хотите анимацию между анимацией, вам нужен ViewFlipper для анимации.

сделать нижеследующий. Я думаю, решить проблему.

Создать новый файл XML и добавить вкладку ViewFlipper в нем ...

использование включает в себя вкладку, чтобы включить всю другую раскладку, когда вы хотите сделать анимацию.

и чем использовать следующий код

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

почему вы копируете пасты выше ответ здесь? – Sameer

5

Ваш ImageView должен иметь источник, определенный в любом XML-или вашей деятельности.

XML:

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

активность:

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

Пожалуйста, добавьте еще немного вещества в свой ответ, чем просто код. Добавьте некоторые соображения о том, как и почему этот код решает проблему. – Matsemann

11

enter image description here

Чтобы добавить другой ответ, вы можете также попробовать Universal Tween Engine, чтобы оживить ваш андроид UIs. Действительно, ваша анимация, которая требует достаточно несколько строк в своем формате XML, будет описана следующим образом:

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(); 

Это может быть более удобным для чтения, если у вас есть большой набор действий в последовательность.Двигатель сильно оптимизирован для Android, и особенно для игр, и не выделяет ничего, чтобы обеспечить лучшую производительность.

Это полностью открытый источник, сильно документированный и выпущенный с лицензией Apache-2.

Вы можете дать Android demo попробовать, если вы хотите :)

+0

Кстати, это замечательная библиотека, которая прекрасно работает по сей день. – alvi