アニメーションさせているViewのVisibilityが操作できない
はじめに
ImageViewをアニメーションさせておき、イベントで表示非表示を切り替えようと思ったらできなかった。
例
初期設定
// アニメーション設定 TranslateAnimation translate = new TranslateAnimation(0, 5, 0, 0); translate.setDuration(3000); translate.setInterpolator(new CycleInterpolator(10)); translate.setRepeatCount(Animation.INFINITE); ((ImageView) findViewById(R.id.imageView1)).startAnimation(translate);
各イベント
private void start() { ((ImageView) findViewById(R.id.imageView1)).setVisibility(View.VISIBLE); } private void stop() { ((ImageView) findViewById(R.id.imageView1)).setVisibility(View.GONE); }
とりあえず
RepeatCountを0に設定したAnimationオブジェクトを設定し直したら消せました。
各イベント書き直し
private void start() { TranslateAnimation translate = new TranslateAnimation(0, 5, 0, 0); translate.setDuration(3000); translate.setInterpolator(new CycleInterpolator(10)); translate.setRepeatCount(Animation.INFINITE); ((ImageView) findViewById(R.id.imageView1)).startAnimation(translate); ((ImageView) findViewById(R.id.imageView1)).setVisibility(View.VISIBLE); } private void stop() { TranslateAnimation translate = new TranslateAnimation(0, 0, 0, 0); translate.setDuration(0); translate.setInterpolator(new CycleInterpolator(0)); translate.setRepeatCount(0); ((ImageView) findViewById(R.id.imageView1)).startAnimation(translate); ((ImageView) findViewById(R.id.imageView1)).setVisibility(View.GONE); }
しかしここで問題が
startAnimation(Animation animation)を呼び出した際にVisibilityも切り替わるらしく、上記のままstop()を繰り返し呼ぶと一瞬表示されてしまう。なのでこの場合は"既にRepeatCountが0のAnimationオブジェクトが設定されていれば何もしない"という判定を入れるべき
stop()書き直し
public void stop() { Animation animation = ((ImageView) findViewById(R.id.imageView1)).getAnimation(); if (null != animation && 0 != animation.getRepeatCount()) { TranslateAnimation translate = new TranslateAnimation(0, 0, 0, 0); translate.setDuration(0); translate.setInterpolator(new CycleInterpolator(0)); translate.setRepeatCount(0); ((ImageView) findViewById(R.id.imageView1)).startAnimation(translate); } ((ImageView) findViewById(R.id.imageView1)).setVisibility(View.GONE); }
本当は
Animationクラスのcancel()とかで何とかしたかったけど私にはできませんでした。とりあえず急ぎなのでこんなもので