转自:http://my.oschina.net/fanxiao/blog/152175
给ActionBar中的按钮添加旋转动画(刷新动画)
经常看到很多应用会在Actionbar上放一个刷新按钮用来刷新页面内容,但是点击后并没有一个刷新的旋转动画,感觉少点什么,那我们就给它加一个旋转动吧!
首先是菜单布局,有两个菜单,都设置成以Actionbar的方式显示,其中一个为刷新菜单:
res/menu/main.xml
01 | < menu xmlns:android = "http://schemas.android.com/apk/res/android" > |
04 | android:id = "@+id/air_traffic" |
05 | android:icon = "@drawable/ic_action_airtraffic" |
06 | android:showAsAction = "always" > |
09 | android:id = "@+id/refresh" |
10 | android:icon = "@drawable/ic_action_refresh" |
11 | android:showAsAction = "always" > |
然后我们需要一个View来显示旋转动画:
res/layout/action_view.xml
1 | < ImageView xmlns:android = "http://schemas.android.com/apk/res/android" |
2 | style = "@android:style/Widget.ActionButton" |
3 | android:layout_width = "wrap_content" |
4 | android:scaleType = "centerInside" |
5 | android:layout_height = "wrap_content" /> |
然后就是我们的主窗体啦:
src/com/ns/adf/MainActivity.java
03 | import com.ns.abf.R.anim; |
04 | import com.ns.abf.R.drawable; |
06 | import android.os.Bundle; |
07 | import android.annotation.SuppressLint; |
08 | import android.app.Activity; |
09 | import android.view.Menu; |
10 | import android.view.MenuItem; |
11 | import android.view.View; |
12 | import android.view.animation.Animation; |
13 | import android.view.animation.AnimationUtils; |
14 | import android.widget.ImageView; |
16 | public class MainActivity extends Activity { |
18 | protected MenuItem refreshItem; |
21 | protected void onCreate(Bundle savedInstanceState) { |
22 | super .onCreate(savedInstanceState); |
23 | setContentView(R.layout.activity_main); |
27 | public boolean onCreateOptionsMenu(Menu menu) { |
29 | getMenuInflater().inflate(R.menu.main, menu); |
34 | public boolean onOptionsItemSelected(MenuItem item) { |
35 | switch (item.getItemId()) { |
37 | showRefreshAnimation(item); |
40 | return super .onOptionsItemSelected(item); |
44 | @SuppressLint ( "NewApi" ) |
45 | private void showRefreshAnimation(MenuItem item) { |
46 | hideRefreshAnimation(); |
51 | ImageView refreshActionView = (ImageView) getLayoutInflater().inflate(R.layout.action_view, null ); |
52 | refreshActionView.setImageResource(drawable.ic_action_refresh); |
53 | refreshItem.setActionView(refreshActionView); |
56 | Animation animation = AnimationUtils.loadAnimation( this , anim.refresh); |
57 | animation.setRepeatMode(Animation.RESTART); |
58 | animation.setRepeatCount(Animation.INFINITE); |
59 | refreshActionView.startAnimation(animation); |
62 | @SuppressLint ( "NewApi" ) |
63 | private void hideRefreshAnimation() { |
64 | if (refreshItem != null ) { |
65 | View view = refreshItem.getActionView(); |
67 | view.clearAnimation(); |
68 | refreshItem.setActionView( null ); |
大功告成,运行查看效果:
参考:https://github.com/github/gauges-android