7
votes

Animation Android XML Problèmes

J'essaie d'utiliser le cadre d'animation d'Android pour que mon imageView se déplace dans un motif de diamant. Voici mon animation.xml: xxx

Ma mise en page: xxx

et mon ostart: xxx

Lorsque je démarre mon application, tout ce que je vois est un écran vide pendant 2 secondes, puis mon image apparaît dans le coin supérieur gauche de l'écran. Si je supprimais tout sauf une des animations de traduction, je verrai l'image déplacer dans une ligne diagonale.

Je préférerais utiliser XML pour définir l'animation et non Java.

Quelqu'un a-t-il un aperçu de la façon dont je peux voir toute l'animation?

-Dan


2 commentaires

Il semble que cela ait quelque chose à voir avec l'utilisation de "% p". Si je change "% P" sur "%", l'ensemble de l'animation fonctionne mais est maintenant confiné à une partie beaucoup plus petite de l'écran. Selon le document "%", est en relation avec l'objet et "% P" est par rapport au parent de l'objet qui est vraiment ce que je veux. Ce qui explique pourquoi il ne fait que faire l'animation dans une petite boîte.


Pour préciser davantage, j'aimerais utiliser XML pour définir mon animation par rapport au parent de l'image d'IMAGEview que je suis animé. Je n'accepterai aucune réponse indiquant que le cadre est cassé, je n'accepterai pas une réponse qui nécessite que l'animation soit définie dans Java.


4 Réponses :


1
votes

Essayez ceci:

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


1 commentaires

Cela n'a eu aucun effet pour moi. Selon le doc ( développeur.android.com/Guide/topics/resources / ... ), je devrais être capable de spécifier une startoffset sur une animation qui devrait me permettre de "chaîner" l'animation de la manière dont j'ai montré.



15
votes

Les attributs d'animation sont relatifs à l'endroit où ils se trouvent quand ils commencent. Ceci est probablement beaucoup plus proche de ce que vous voulez:

<?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>


2 commentaires

Bonjour Reuben Scratton, je veux mettre en pause cette animation sur le bouton clic et reprendre le clic. c'est possible?


A littéralement passé toute la journée à essayer de comprendre cela. J'étais sur le point d'abandonner. Merci pour la solution.



1
votes

Utilisez celui-ci Ça marche, je l'ai testé

<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 commentaires

0
votes

Utilisez ce code XML d'animation. Il fonctionne:

<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>


0 commentaires