ActionBar按钮动画的实现

来源:互联网 发布:qq认证群排名优化 编辑:程序博客网 时间:2024/04/28 15:33

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中,生成菜单

@Overridepublic 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);


再设置MenuItem的ActionView

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" />





0 0