Android Studio(Kotlin)导航抽屉能否用矢量Drawable动画替代ImageView?
完全可以用矢量Drawable动画替代Navigation Drawer里的ImageView,以下是具体实现步骤:
制作动画矢量Drawable资源
先创建一个带动画逻辑的矢量Drawable文件(比如命名为ic_animated_menu.xml):先用Android Studio的Vector Asset工具生成基础矢量图标,再通过<animated-vector>标签绑定动画。示例代码如下:<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_menu_base"> <target android:name="menu_main_path" android:animation="@anim/menu_rotate_anim"> </target> </animated-vector>对应的旋转动画文件
menu_rotate_anim.xml放在res/anim目录:<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="600" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" android:repeatCount="infinite" android:interpolator="@android:anim/linear_interpolator"/>替换Navigation Drawer布局中的ImageView
找到导航抽屉的布局文件(通常是activity_main_drawer.xml或对应菜单布局),将原ImageView替换为AppCompatImageView(兼容低版本),直接设置src为动画矢量Drawable:<AppCompatImageView android:id="@+id/drawer_animated_icon" android:layout_width="28dp" android:layout_height="28dp" android:src="@drawable/ic_animated_menu" android:contentDescription="@string/drawer_menu_icon"/>在Kotlin代码中控制动画
在Activity/Fragment中,获取Drawable并转为AnimatedVectorDrawable来启动/停止动画;如果需要和抽屉的展开/收起状态联动,可监听Drawer状态:// 启动动画 val animatedDrawable = binding.drawerAnimatedIcon.drawable as AnimatedVectorDrawable animatedDrawable.start() // 与抽屉状态联动 binding.drawerLayout.addDrawerListener(object : DrawerLayout.DrawerListener { override fun onDrawerOpened(drawerView: View) { (binding.drawerAnimatedIcon.drawable as AnimatedVectorDrawable).start() } override fun onDrawerClosed(drawerView: View) { (binding.drawerAnimatedIcon.drawable as AnimatedVectorDrawable).stop() } override fun onDrawerSlide(drawerView: View, slideOffset: Float) {} override fun onDrawerStateChanged(newState: Int) {} })关键注意点
- 若minSdkVersion低于21,需引入
androidx.appcompat:appcompat库并使用AppCompatImageView来兼容矢量Drawable动画 - 复杂动画建议控制时长和重复逻辑,避免过度消耗性能
- 导航菜单列表的条目图标同理,给对应条目设置动画矢量Drawable即可
- 若minSdkVersion低于21,需引入
内容的提问来源于stack exchange,提问作者speedflow
相关产品推荐
相关产品推荐

