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>

旋轉(zhuǎn)動畫:

<?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

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,124評論 25 708
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,206評論 4 61
  • 幼兒拒絕回園怎么破??? 十一長假過后,好多孩子還沉浸在假日 ...
    知南茶溫閱讀 471評論 0 0
  • 愛情來的太快就像龍卷風 所以才有了等風也等你嗎 那么你等的是誰誰又知道 也許你滿心歡喜 也許你滿懷憧憬 那么誰又是...
    別說話看書閱讀 232評論 0 0
  • 我醉在三月那場煙雨。 不小心跌入一片星輝, 不小心,跌落在旖旎的時光中。 春雨翩然而至, 潛入這微涼的夜。 一如你...
    紫陌x閱讀 1,062評論 11 14