关于在toolbar 的menu中控件或者menu的item做动画的实现

来源:互联网 发布:学嵌入式好还是java好? 编辑:程序博客网 时间:2024/05/21 10:12

突发奇想,突然想给toobar上面的那个扫一扫标志做个动画,这样子明显一些,

但是真的开始做了,才发现原来跟平常的view做动画 有点不一样。

首先是我的menu xml文件

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto">    <item        android:id="@+id/action_capture"        android:icon="@drawable/ic_action_scan"        android:orderInCategory="100"        android:title="@string/menu_capture"        app:showAsAction="always" />    <item        android:id="@+id/action_about_us"        android:orderInCategory="200"        android:title="@string/menu_about_us"        app:showAsAction="never" />    <item        android:id="@+id/action_feedback"        android:orderInCategory="300"        android:title="@string/menu_feedback"        app:showAsAction="never" /></menu>

可以看到 主要就是那
ic_action_scan
这个 做动画呢。那么接下来正式开始了

我又重新建立了个layout布局文件,里面就一个imageview。主要就是显示 扫一扫图片的

action_view.xml

<?xml version="1.0" encoding="utf-8"?><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" /><!-- 扫一扫动画-->

最后就是在 activity中做动画了

 @Override    public boolean onOptionsItemSelected(MenuItem item) {        if (mActionBarDrawerToggle != null && mActionBarDrawerToggle.onOptionsItemSelected(item)) {            return true;        }        switch (item.getItemId()) {            case R.id.action_capture:                showToast("扫一扫");                  showAnimate(item); //这里开始动画                break;            case R.id.action_about_us:                showToast("关于我们");                break;            case R.id.action_feedback:                showToast("反馈");                break;        }        return super.onOptionsItemSelected(item);    }

 /**     * item做动画     *     * @param item     */    private void showAnimate(MenuItem item) {        hideAnimate();        menuItem = item;        //这里使用一个ImageView设置成MenuItem的ActionView,这样我们就可以使用这个ImageView显示旋转动画了        ImageView qrView = (ImageView) getLayoutInflater().inflate(R.layout.action_view, null);        qrView.setImageResource(R.drawable.ic_action_scan);        menuItem.setActionView(qrView);        //显示动画        Animation animation = AnimationUtils.loadAnimation(this,R.anim.shake);        animation.setRepeatMode(Animation.RESTART);        animation.setRepeatCount(Animation.INFINITE);        qrView.startAnimation(animation);    }

  /**     * 关闭动画     */    private void hideAnimate() {        if(menuItem != null){            View view = menuItem.getActionView();            if(view != null){                view.clearAnimation();                menuItem.setActionView(null);            }        }    }

上面用到了2个动画布局文件

cycle_7.xml

<cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android"    android:cycles="7" />

shake.xml

<?xml version="1.0" encoding="utf-8"?><translate xmlns:android="http://schemas.android.com/apk/res/android"    android:duration="1000"    android:fromXDelta="0"    android:interpolator="@anim/cycle_7"    android:toXDelta="10" />


0 0
原创粉丝点击