給ActionBar中的按鈕添加旋轉動畫(刷新動畫)

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

    參考:https://github.com/github/gauges-android 佈局

相關文章
相關標籤/搜索