您的位置:首页 > 其它

给ActionBar中的按钮添加旋转动画(刷新动画)

2013-08-12 18:19 435 查看
经常看到很多应用会在Actionbar上放一个刷新按钮用来刷新页面内容,但是点击后并没有一个刷新的旋转动画,感觉少点什么,那我们就给它加一个旋转动吧!

首先是菜单布局,有两个菜单,都设置成以Actionbar的方式显示,其中一个为刷新菜单:

res/menu/main.xml

<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

<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

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);
}
}
}

}


大功告成,运行查看效果:


参考:https://github.com/github/gauges-android
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: