常常看到不少應用會在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