"探秘Android Drawable魔法:一篇文章教你玩转StateListDrawable与AnimationDrawable!"

简介: 【8月更文挑战第18天】Drawable是Android中用于屏幕绘制的图形对象,StateListDrawable与AnimationDrawable是两种实用类型。StateListDrawable可根据控件状态变化显示不同图形,如按钮的点击反馈;AnimationDrawable则用于实现帧动画效果,常用于加载提示或动态图标。两者均可通过XML定义或代码创建,并轻松应用于View的背景中,有效增强应用的交互性和视觉体验。

Drawable解析——StateListDrawable和AnimationDrawable
Drawable是Android开发中经常接触到的一个概念,它表示可以被绘制在屏幕上的一块图形。在Android系统中,Drawable有多种类型,其中StateListDrawable和AnimationDrawable是比较常用的两种。本文将针对这两个Drawable,通过问题解答的形式,为大家详细解析其用法。
一、什么是StateListDrawable?
StateListDrawable是一种特殊的Drawable,它可以根据不同的状态显示不同的图形。例如,按钮在正常状态、按下状态、选中状态等可以显示不同的背景。
Q1:如何创建一个StateListDrawable?
创建StateListDrawable有两种方式:在XML布局文件中定义,或者在代码中动态创建。下面分别介绍这两种方式。

  1. 在XML布局文件中定义:
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/normal" android:state_pressed="false"/>
     <item android:drawable="@drawable/pressed" android:state_pressed="true"/>
    </selector>
    
  2. 在代码中动态创建:
    StateListDrawable stateListDrawable = new StateListDrawable();
    stateListDrawable.addState(new int[]{
         android.R.attr.state_pressed}, getResources().getDrawable(R.drawable.pressed));
    stateListDrawable.addState(new int[]{
         }, getResources().getDrawable(R.drawable.normal));
    
    Q2:如何为View设置StateListDrawable背景?
    为View设置StateListDrawable背景,可以直接在XML布局文件中设置,也可以在代码中设置。
  3. 在XML布局文件中设置:
    <Button
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/state_list_drawable"/>
    
  4. 在代码中设置:
    Button button = findViewById(R.id.button);
    button.setBackground(stateListDrawable);
    
    二、什么是AnimationDrawable?
    AnimationDrawable是一种帧动画Drawable,它可以将多张图片按顺序播放,形成动画效果。例如,App的加载动画、聊天表情等。
    Q1:如何创建一个AnimationDrawable?
    创建AnimationDrawable同样可以在XML布局文件中定义,或者在代码中动态创建。下面分别介绍这两种方式。
  5. 在XML布局文件中定义:
    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
     android:oneshot="false">
     <item android:drawable="@drawable/frame1" android:duration="50"/>
     <item android:drawable="@drawable/frame2" android:duration="50"/>
     <!-- 更多帧 -->
    </animation-list>
    
  6. 在代码中动态创建:
    AnimationDrawable animationDrawable = new AnimationDrawable();
    animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame1), 50);
    animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame2), 50);
    // 添加更多帧
    
    Q2:如何为View设置AnimationDrawable背景并播放动画?
    为View设置AnimationDrawable背景并播放动画,可以按以下步骤操作:
  7. 在XML布局文件中设置:
    <ImageView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:background="@drawable/animation_drawable"/>
    
  8. 在代码中设置并播放动画:
    ImageView imageView = findViewById(R.id.imageView);
    imageView.setBackgroundResource(R.drawable.animation_drawable);
    AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
    animationDrawable.start();
    
    通过以上解析,相信大家对StateListDrawable和AnimationDrawable有了更深入的了解。在实际开发中,灵活运用这两种Drawable,可以丰富App的视觉效果,提升用户体验。
相关文章
|
6月前
|
XML 存储 编解码
android 目录结构中 drawable(hdpi,ldpi,mdpi) 的区别
android 目录结构中 drawable(hdpi,ldpi,mdpi) 的区别
233 1
|
4月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的高校后勤网上报修系统安卓app附带文章源码部署视频讲解等
55 0
|
5月前
|
JavaScript Java 测试技术
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
基于ssm+vue.js+uniapp小程序的安卓的微博客系统附带文章和源代码部署视频讲解等
47 2
|
6月前
|
Android开发
【苹果安卓通用】xlsx 和 vCard 文件转换器,txt转vCard文件格式,CSV转 vCard格式,如何批量号码导入手机通讯录,一篇文章说全
本文介绍了如何快速将批量号码导入手机通讯录,适用于企业客户管理、营销团队、活动组织、团队协作和新员工入职等场景。步骤包括:1) 下载软件,提供腾讯云盘和百度网盘链接;2) 打开软件,复制粘贴号码并进行加载预览和制作文件;3) 将制作好的文件通过QQ或微信发送至手机,然后按苹果、安卓或鸿蒙系统的指示导入。整个过程简便快捷,可在1分钟内完成。
156 6
|
6月前
|
Java 测试技术 开发工具
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
Android 笔记:AndroidTrain , Lint , build(1),只需一篇文章吃透Android多线程技术
|
5月前
|
XML Java API
54. 【Android教程】图片资源:Drawable
54. 【Android教程】图片资源:Drawable
80 0
|
6月前
|
Java 测试技术 Android开发
Android Gradle 干货,看这篇文章就行了
Android Gradle 干货,看这篇文章就行了
|
6月前
|
XML 编解码 Android开发
Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)
Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)
110 1
|
6月前
|
XML 编解码 Android开发
Android各种各样的Drawable-更新中
Android各种各样的Drawable-更新中
98 0
|
6月前
|
Android开发
[Android]Layer Drawable
[Android]Layer Drawable
48 0