2013-11-25 4 views
0

Мне нужно реализовать анимацию «Поворот» до TextView. Ниже приведен код.Поворот анимации не работает должным образом

MainActivity.java

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.View.OnTouchListener; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.widget.TextView; 

public class MainActivity extends Activity { 

    private TextView words; 
    private Map<String, String> wordsMap; 
    private Animation rotate; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     words = (TextView)findViewById(R.id.word); 

     rotate = AnimationUtils.loadAnimation(this, R.anim.rotate); 

     wordsMap = new HashMap<String, String>(); 
     wordsMap.put("Dog", "Perro"); 
     wordsMap.put("Cat", "Gato"); 
     wordsMap.put("Universe", "Universo"); 
     wordsMap.put("Telephone", "Teléfono"); 
     wordsMap.put("Key Board", "Teclado Del"); 
     wordsMap.put("Country", "País"); 

     //Registering Listeners 
     words.setOnClickListener(new TextClicked()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    private OnTouchListener textViewSwiped = new OnSwipeTouchListener() 
    { 
     public boolean onSwipeLeft() 
     { 
      return true; 
     } 
    }; 

    private class TextClicked implements OnClickListener 
    { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      words.setAnimation(rotate); 
        words.setText("Rotated"); 

     } 

    } 

} 

rotate.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <rotate android:fromDegrees="0" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:duration="600" 
     android:interpolator="@android:anim/cycle_interpolator"/> 

</set> 

Когда я нажимаю на TextView, он не работает. Кроме того, анимация вращения, в которой я нуждаюсь, немного отличается от того, что я сделал здесь. Это вращение подобно кругу. Мне нужно что-то, что перевернулось вверх и отобразить новый текст. Например, вы можете перевернуть Карту в игровой карте, установленной для отображения другой стороны вправо? Мне нужно то же самое.

UPDATE

Я не ищу для вращения в 90 градусов. Это должно быть похоже на то, как вы можете «перевернуть» карту (я говорю о реальных карточках в наборах карточных игр) с другой стороны.

+1

добавить toDegrees = ... – pskink

+0

@pskink: Я не ищу для вращения в 90 градусов. Это должно быть похоже на то, как вы можете «перевернуть» карту (я говорю о реальных карточках в наборах карточных игр) с другой стороны. –

ответ

1

«Что мне нужно, это то, что переворачивается и отобразить новый текст ....»

для этого, вам нужно использовать ObjectAnimator, который поддерживает API от 11 и вы можете скачать библиотеку supprort для этого из here.

и увидеть пример кода, который вращает TextView вдоль оси Y. ...

ObjectAnimator animator = ObjectAnimator.ofFloat(textView, "rotationY", 0,90,180,270,360); 
    animator.setDuration(3000); 
    animator.setInterpolator(new LinearInterpolator()); 
    animator.start(); 
+0

Здравствуйте, эта анимация просто «мигает», не так ли? –

+0

Я не знаю, что вы подразумеваете под «миганием», но он вращает TextView вдоль оси Y по центральной горизонтальной линии. –

1
<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <rotate android:fromDegrees="0" 
     android:toDegrees="90" // changable 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:duration="600" 
     android:interpolator="@android:anim/cycle_interpolator"/> 
</set> 
+0

Я не ищу поворот на 90 градусов. Это должно быть похоже на то, как вы можете «перевернуть» карту (я говорю о реальных карточках в наборах карточных игр) с другой стороны. –

+0

для этого вам нужно использовать более одного изображения .... Думаю, –

1

Chnage ваш XML-код

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

<rotate 
    android:duration="1000" 
    android:fromDegrees="0" 
    android:toDegrees="90" 
    android:interpolator="@android:anim/cycle_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" /> 

</set> 

, а также на TextView кнопку запуска анимации

words.startAnimation(rotate); 
words.setText("Rotated"); 

Анимационный слушатель в onCreate()

rotate.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      // TODO Auto-generated method stub 
      words.setText("Rotated"); 
     } 
    }); 
+0

, и вы можете изменить текст после завершения анимации, для этого вы можете использовать прослушиватель – Meenal

+0

, вы можете изменить настройки степени и точности в соответствии с вашими потребностями. – Meenal

+0

Я не ищу поворот на 90 градусов. Это должно быть похоже на то, как вы можете «перевернуть» карту (я говорю о реальных карточках в наборах карточных игр) с другой стороны. –

0

Я нашел ответ для этого. Вот.

<?xml version="1.0" encoding="utf-8"?> 

<scale 

    xmlns:android="http://schemas.android.com/apk/res/android" 

     android:fromXScale="1.0" android:toXScale="0.0" 

     android:pivotX="50%" 

     android:fromYScale="1.0" android:toYScale="1.0" 

     android:pivotY="50%" 

     android:duration="250" /> 
0

попробовать это:

public class FlipAnimation extends Animation { 
    private View view; 
    private Drawable drawable; 
    private boolean backSide; 
    private Camera camera; 

    public FlipAnimation(View v, Drawable d) { 
     this.view = v; 
     this.drawable = d; // this needs to be a mirrored Drawable 
     this.camera = new Camera(); 
     this.camera.save(); 
     this.backSide = false; 
     setDuration(3000); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     float degrees = 180 * interpolatedTime; 
     if (degrees > 90 && !backSide) { 
      backSide = true; 
      view.setBackgroundDrawable(drawable); 
     } 
     camera.restore(); 
     camera.save(); 
     camera.rotateX(degrees); 
     Matrix m = t.getMatrix(); 
     camera.getMatrix(m); 
     float w2 = view.getWidth()/2f; 
     float h2 = view.getHeight()/2f; 
     m.preTranslate(-w2, -h2); 
     m.postTranslate(w2, h2); 
    } 
} 
0

Сделать папку Anim в разрешении. и добавьте.XML-файл, назовите его from_middle и вставьте следующий код

<scale 
    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fromXScale="0.0" android:toXScale="1.0" 
     android:pivotX="50%" 
     android:fromYScale="1.0" android:toYScale="1.0" 
     android:pivotY="50%" 
     android:duration="250" /> 

Сделать другой файл XML и назовите его to_middle и вставить следующее:

<?xml version="1.0" encoding="utf-8"?> 

<scale 

    xmlns:android="http://schemas.android.com/apk/res/android" 
     android:fromXScale="1.0" android:toXScale="0.0" 
     android:pivotX="50%" 
     android:fromYScale="1.0" android:toYScale="1.0" 
     android:pivotY="50%" 
     android:duration="250" /> 

В вашей деятельности:

вставьте код на странице:

animation1 = AnimationUtils.loadAnimation(this, R.anim.to_middle); 
    animation1.setAnimationListener(this); 
    animation2 = AnimationUtils.loadAnimation(this, R.anim.from_middle); 
    animation2.setAnimationListener(this); 

и onAnimationEnd:

@Override 
    public void onAnimationEnd(Animation animation) { 
     if (animation==animation1) { 
      if (isBackOfCardShowing) { // boolean variable 
      mtextView1.setBackgroundResource(R.drawable.surfboard_memory); 

       } else { 
      mtextView1.setBackgroundResource(R.drawable.back_memory);// any pic 
       } 
      mtextView1.clearAnimation(); 
      mtextView1.setAnimation(animation2); 
      mtextView1.startAnimation(animation2); 
     } else { 
       isBackOfCardShowing=!isBackOfCardShowing; 
       mtextView1.setEnabled(true); 
     } 
    } 

Это на самом деле работает и проверен .. :)

Смежные вопросы