Android 菜单动画效果

为标题栏菜单项添加动画效果,需要设置菜单的 actionView,并且给 actionView设置动画。点击菜单时开始动画,完成菜单项对应的功能后停止动画。

菜单项的 actionView

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
           style="@style/Widget.AppCompat.ActionButton"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:src="@drawable/ic_refresh_white_24dp">

</ImageView>

旋转动画:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="1000"
    android:interpolator="@android:anim/linear_interpolator">

</rotate>

模拟延时动画效果

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.item_rotate, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.refresh: {
                mRefreshItem = item;
                refresh();
                return true;
            }
        }
        return super.onOptionsItemSelected(item);
    }

    private void refresh() {
        if (getActivity() == null) {
            return;
        }
        ImageView imageView = (ImageView) getActivity().getLayoutInflater()
                .inflate(R.layout.action_view_refresh, null);

        Animation animation = AnimationUtils.loadAnimation(getActivity(), R.anim.clockwise_refresh);
        animation.setRepeatCount(Animation.INFINITE);
        imageView.startAnimation(animation);
        mRefreshItem.setActionView(imageView);

        new Thread() {
            @Override
            public void run() {
                try {
                    sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    getView().post(new Runnable() {
                        @Override
                        public void run() {
                            mRefreshItem.getActionView().clearAnimation();
                            mRefreshItem.setActionView(null);
                        }
                    });
                }

            }
        }.start();
    }

注意最后要移除动画 clearAnimation(),设置 actionViewnull

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,983评论 25 708
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 幼儿拒绝回园怎么破??? 十一长假过后,好多孩子还沉浸在假日 ...
    知南茶温阅读 465评论 0 0
  • 爱情来的太快就像龙卷风 所以才有了等风也等你吗 那么你等的是谁谁又知道 也许你满心欢喜 也许你满怀憧憬 那么谁又是...
    别说话看书阅读 223评论 0 0
  • 我醉在三月那场烟雨。 不小心跌入一片星辉, 不小心,跌落在旖旎的时光中。 春雨翩然而至, 潜入这微凉的夜。 一如你...
    紫陌x阅读 1,061评论 11 14