[解決済み] AndroidのImageViewを使ったフェードイン・フェードアウト
質問
作成中のスライドショーでトラブルが発生しました。
xmlでフェードインとフェードアウトの2つのアニメーションを作りました。
フェードイン.xml
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="2000"/>
</set>
フェードアウト.xml
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="2000"/>
</set>
現在表示されている画像がフェードアウトし、別の画像がフェードインするように、フェード効果を使用してImageViewから画像を変更しようとしているものです。 すでに画像が設定されていることを考えると、これで問題なくこの画像をフェードアウトさせることができます。
Animation fadeInAnimation = AnimationUtils.loadAnimation(this, R.anim.your_fade_in_anim);
imageView.startAnimation(fadeoutAnim);
でもって、次に表示される画像を設定。
imageView.setImageBitmap(secondImage);
imageViewに表示されるだけで、アニメーションを設定すると、画像が隠され、フェードインしてしまいます...。これを解決する方法はないでしょうか? imageView.setImageBitmap(secondImage)を実行したときです。 コマンドを実行すると、画像はすぐに表示されず、フェードインアニメーションが実行されたときにのみ表示されます?
どのように解決するのですか?
冒頭の方法で実装するためには、まず最初に AnimationListener を追加して、アニメーションの開始と終了を検出できるようにします。フェードアウトの onAnimationEnd() が呼ばれたら、ImageView オブジェクトの可視性を View.INVISIBLE に設定し、画像を切り替えてフェードインアニメーションを開始することができます - ここでも別の AnimationListener が必要です。フェードインアニメーションのonAnimationEnd()を受信したら、ImageViewをView.VISIBLEに設定すれば、期待通りの効果が得られるはずです。
以前にも似たような効果を実装したことがありますが、その時は ViewSwitcher を使用しています。ViewSwitcherにフェードインとフェードアウトのアニメーションを設定し、AnimationListenerの実装を管理することができます。そうすれば、2つのImageViewを交互に表示させるだけです。
編集します。 もう少し役に立つように、ViewSwitcherの使い方の簡単な例を挙げます。私は完全なソースを以下の場所に含んでいます。 https://github.com/aldryd/imageswitcher .
activity_main.xml
<ViewSwitcher
android:id="@+id/switcher"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:inAnimation="@anim/fade_in"
android:outAnimation="@anim/fade_out" >
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@drawable/sunset" />
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@drawable/clouds" />
</ViewSwitcher>
MainActivity.java
// Let the ViewSwitcher do the animation listening for you
((ViewSwitcher) findViewById(R.id.switcher)).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ViewSwitcher switcher = (ViewSwitcher) v;
if (switcher.getDisplayedChild() == 0) {
switcher.showNext();
} else {
switcher.showPrevious();
}
}
});
関連
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] TextView.setTextSizeの挙動がおかしい - テキストビューのテキストサイズを画面ごとに動的に設定する方法
-
[解決済み] BottomNavigationViewを新しいNavControllerで使用する際に、フラグメントを生かす方法はありますか?
-
[解決済み] 文字列リソースにHTML?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] データベースでリサイクルビューを使用する
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] Studio 3.4 をアップデートしたら、引数の leftShift() メソッドが見つかりませんでした。
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?