0

オブジェクトがループ内でゆっくりと大きくなったり小さくなったりするため、息と呼ばれるいくつかの簡単なアニメーションを作成しました。次に、このアニメーションを3つのイメージボタンに関連付けると、すべて正常に動作しますが、別の「振動」アニメーションを行うボタンと対話すると、すべてのボタンがアニメーションを再起動しますが、予想される動作は、押されたボタンのみが再起動することでしたアニメーション。

それをもう少しよく理解したいと思います。おそらく、すべてのボタンのアニメーションに独自のライフサイクルを持たせる方法を知りたいです。

それがコードです:

息.xml

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

<scale
    android:duration="1500"
    android:startOffset="0"
    android:fromXScale="0.9"
    android:fromYScale="0.9"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="1.0"
    android:toYScale="1.0"
    android:repeatMode="reverse"
    android:repeatCount="infinite" />

</set>

それがJavaコードです:

package com.anesoft.android.citmania;

import com.anesoft.android.citmania.models.Defines;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Typeface;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MenuActivity extends Activity implements OnClickListener, AnimationListener {

    ImageButton opzioni;
    ImageButton play;
    ImageButton espansioni;

    ImageView logo;

    TextView title,title2;

    Animation breath,rotate_r,rotate_l,vibrate;
    int flag = 0;

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

        logo = (ImageView)findViewById(R.id.logo);
        title = (TextView)findViewById(R.id.title);
        title2 = (TextView)findViewById(R.id.title2);
        opzioni = (ImageButton)findViewById(R.id.options);
        play = (ImageButton)findViewById(R.id.play);
        espansioni = (ImageButton)findViewById(R.id.expansions);

        breath = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.breath);
        rotate_r = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_right);
        rotate_l = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate_left);
        vibrate = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.vibrate);

        vibrate.setAnimationListener(this);

        Typeface tf = Typeface.createFromAsset(getAssets(), "font/Canter_Light.otf");
        Typeface tf2 = Typeface.createFromAsset(getAssets(), "font/Canter Bold.otf");

        title.setTypeface(tf);
        title2.setTypeface(tf2);

        title.setText("CIT");
        title.setTextSize(Defines.TITLE_SIZE);

        title2.setText(".MANIA");
        title2.setTextSize(Defines.TITLE_SIZE);



        opzioni.startAnimation(breath);
        play.startAnimation(breath);
        espansioni.startAnimation(breath);

        logo.setOnClickListener(this);
        opzioni.setOnClickListener(this);
        play.setOnClickListener(this);
        espansioni.setOnClickListener(this);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == R.id.options) {
            Intent i = new Intent(this, OptionsActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            startActivity(i);
        } else if (id == R.id.play) {
            Intent i = new Intent(this, LevelPickerActivity.class);
            i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
            startActivity(i);
        } else if(id == R.id.expansions){
            espansioni.startAnimation(vibrate);
            Toast.makeText(this, "Implementando", Toast.LENGTH_SHORT).show();
            //espansioni.startAnimation(bounce);
        }else if(id == R.id.logo){
            if(flag==0){
                logo.startAnimation(rotate_r);
                flag=1;
            }else{
                logo.startAnimation(rotate_l);
                flag=0;
            }
        }

    }

    @Override
    public void onAnimationEnd(Animation arg0) {
        if (arg0 == vibrate) {
            espansioni.startAnimation(breath);
        }
    }

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

    }

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

    }

}

バイブレーション アニメーションを開始し、IT が終了したら、タップされているボタンでのみ呼吸を再開する方法を確認できますが、それらはすべて同期された方法でアニメーションを再開します。

前もって感謝します

4

1 に答える 1

1

アニメーションを 3 つのボタンすべてで独立して動作させたい場合は、アニメーションのインスタンスを 3 つ作成する必要があります。

アニメーションが停止すると、ビューに新しい状態が与えられます。3 つのビューに同じアニメーションを与えた場合、それらはすべて新しい状態を受け取ります。

于 2013-10-16T09:26:40.960 に答える