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

 经常看到很多应用会在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" />

  然后就是我们的主窗体啦:

  MainActivity.java

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

实现的效果:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值