オブジェクトがループ内でゆっくりと大きくなったり小さくなったりするため、息と呼ばれるいくつかの簡単なアニメーションを作成しました。次に、このアニメーションを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 が終了したら、タップされているボタンでのみ呼吸を再開する方法を確認できますが、それらはすべて同期された方法でアニメーションを再開します。
前もって感謝します