ActionBar是Android提供的系统控件,这里能够为用户提供十分便捷的导航等操作。但是,有时候会觉得,在ActionBar上,为这个按钮添加一些动画效果,能够进一步提升用户感受。这篇文章,就简单介绍,ActionBar上按钮的动画是如何实现的。
首先,我们需要写一个菜单,命名为main_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/refresh"
android:icon="@drawable/ic_refresh"
android:showAsAction="ifRoom|withText"
android:title="刷新">
</item>
</menu>
在Activity中,生成菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getSupportMenuInflater().inflate(R.menu.main_browser, menu);
refresh = menu.findItem(R.id.refresh);
return true;
}
其中,refresh是一个MenuItem,是刚刚在main_menu.xml中定义的一个菜单选项
接着,我们将动画绑定到这个MenuItem中来
private void startRefreshAnimation() {
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
ImageView imageView = (ImageView) layoutInflater.inflate(
R.layout.refresh_action_view, null);
Animation animation = AnimationUtils.loadAnimation(
BrowserActivity.this, R.anim.refresh);
imageView.startAnimation(animation);
finishRefreshAnimation();
if (refresh != null) {
refresh.setActionView(imageView);
}
}
从这里可以看到,先实例化一个ImageView的布局,
ImageView imageView = (ImageView) layoutInflater.inflate(R.layout.refresh_action_view, null);
将动画animation 绑定到这个ImageView中,
Animation animation = AnimationUtils.loadAnimation(BrowserActivity.this, R.anim.refresh);
imageView.startAnimation(animation);
refresh.setActionView(imageView);
当我们需要动画停止的时候
private void finishRefreshAnimation() {
if (refresh != null) {
if (refresh.getActionView() != null) {
refresh.getActionView().clearAnimation();
refresh.setActionView(null);
}
}
}
其中refresh_action_view
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@drawable/ic_refresh"
style="?android:actionButtonStyle" />