[解決済み] ActionItemのアニメーションアイコン
質問
私の問題に対する適切な解決策をあらゆるところで探していますが、まだ見つかっていないようです。私はXMLファイルから膨張するメニューを持つActionBar(ActionBarSherlock)を持っており、そのメニューは1つのアイテムを含み、その1つのアイテムはActionItemとして表示されています。
メニューを表示します。
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_menu_refresh"
android:showAsAction="ifRoom"
android:title="Refresh"/>
</menu>
アクティビティがあります。
[...]
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
[...]
ActionItemはアイコンとテキストで表示されますが、ユーザーがActionItemをクリックすると、アイコンがアニメーションし、より具体的にはその場で回転するようにしたいのです。このアイコンはリフレッシュアイコンです。
ActionBar がカスタムビュー ( アクションビューの追加 ) がありますが、このカスタム ビューは ActionBar の全領域をカバーするように拡張され、実際にはアプリアイコン以外のすべてをブロックしてしまいます。
そこで、私の次の試みは、AnimationDrawable を使用して、アニメーションをフレームごとに定義し、drawable をメニュー項目のアイコンとして設定し、次に
onOptionsItemSelected(MenuItem item)
でアイコンを取得し
((AnimationDrawable)item.getIcon()).start()
. しかし、これはうまくいきませんでした。どなたか、この効果を達成する方法をご存知でしょうか?
どのように解決するのですか?
あなたは正しい道を歩んでいます。GitHub Gaug.esアプリがどのように実装されるかは、次のとおりです。
まずアニメーションXMLを定義しています。
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="1000"
android:interpolator="@android:anim/linear_interpolator" />
次に、アクションビューのレイアウトを定義します。
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_refresh"
style="@style/Widget.Sherlock.ActionButton" />
必要なことは、アイテムがクリックされるたびにこのビューを有効にすることです。
public void refresh() {
/* Attach a rotating ImageView to the refresh item as an ActionView */
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView iv = (ImageView) inflater.inflate(R.layout.refresh_action_view, null);
Animation rotation = AnimationUtils.loadAnimation(getActivity(), R.anim.clockwise_refresh);
rotation.setRepeatCount(Animation.INFINITE);
iv.startAnimation(rotation);
refreshItem.setActionView(iv);
//TODO trigger loading
}
読み込みが終わったら、アニメーションを停止し、ビューをクリアするだけです。
public void completeRefresh() {
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
}
そして、あなたは終わりました!
いくつか追加でやることがあります。
- アクションビューのレイアウトインフレとアニメーションのインフレをキャッシュします。これらは遅いので、一度だけ実行するようにします。
-
追加
null
でチェックします。completeRefresh()
アプリのプルリクエストはこちらです。 https://github.com/github/gauges-android/pull/13/files
関連
-
[解決済み] Androidアプリのアイコン設定
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] サポートライブラリのアクションバーをPreferenceActivityに追加するには?
-
[解決済み] LayoutParamsの高さを密度に依存しないピクセル数でプログラム的に設定する。
-
[解決済み] <string> XMLで改行やタブを作るには(eclipse/android)?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ArrayAdapter<myClass> の使用方法
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] handler.postDelayed()を停止する。
-
[解決済み] フラグメント間の値の受け渡し方法
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] PendingIntentの "requestCode "は何に使うのですか?
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio