常常看到不少应用会在Actionbar上放一个刷新按钮用来刷新页面内容,可是点击后并无一个刷新的旋转动画,感受少点什么,那咱们就给它加一个旋转动吧! java
首先是菜单布局,有两个菜单,都设置成以Actionbar的方式显示,其中一个为刷新菜单: android
res/menu/main.xml git
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/air_traffic" android:icon="@drawable/ic_action_airtraffic" android:showAsAction="always"> </item> <item android:id="@+id/refresh" android:icon="@drawable/ic_action_refresh" android:showAsAction="always"> </item> </menu>而后咱们须要一个View来显示旋转动画:
res/layout/action_view.xml github
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" style="@android:style/Widget.ActionButton" android:layout_width="wrap_content" android:scaleType="centerInside" android:layout_height="wrap_content" />而后就是咱们的主窗体啦:
src/com/ns/adf/MainActivity.java app
package com.ns.abf; import com.ns.abf.R.anim; import com.ns.abf.R.drawable; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; public class MainActivity extends Activity { protected MenuItem refreshItem; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.refresh: showRefreshAnimation(item); return true; default: return super.onOptionsItemSelected(item); } } @SuppressLint("NewApi") private void showRefreshAnimation(MenuItem item) { hideRefreshAnimation(); refreshItem = item; //这里使用一个ImageView设置成MenuItem的ActionView,这样咱们就能够使用这个ImageView显示旋转动画了 ImageView refreshActionView = (ImageView) getLayoutInflater().inflate(R.layout.action_view, null); refreshActionView.setImageResource(drawable.ic_action_refresh); refreshItem.setActionView(refreshActionView); //显示刷新动画 Animation animation = AnimationUtils.loadAnimation(this, anim.refresh); animation.setRepeatMode(Animation.RESTART); animation.setRepeatCount(Animation.INFINITE); refreshActionView.startAnimation(animation); } @SuppressLint("NewApi") private void hideRefreshAnimation() { if (refreshItem != null) { View view = refreshItem.getActionView(); if (view != null) { view.clearAnimation(); refreshItem.setActionView(null); } } } }
大功告成,运行查看效果: ide