Android笔记
我的博客
Android笔记
Android笔记
  • Android学习资料
  • Android知识点梳理
  • Android Studio
  • aop
  • UI
    • ViewPager2
    • View
      • View.post()分析
      • 自定义View
        • Canvas使用
        • Paint使用
        • Path使用
        • PathMeasure使用
        • Matrix使用
      • View事件分发
    • TextView
    • EditText
    • 引导页
    • 菜单
    • Toolbar
    • RecyclerView
    • ViewPager
    • BottomSheet
    • 通知
    • CalendarView
    • TimePicker
    • LayoutInfalter
    • shadowlayout
    • 状态栏适配
    • RecyclerView
    • 屏幕适配
  • 组件
    • Activity
    • Intent
    • 服务
      • 服务
      • 绑定服务
      • AIDL
    • Broadcasts
    • Fragment
    • ContentProvider
  • 权限
  • 数据存储
    • 数据和文件存储
    • 将文件保存到外部存储中
    • 将文件保存在内部存储中
    • Android 存储用例和最佳做法
    • 保存键值对数据
  • 编译时注解
    • Untitled
    • Java注解处理器](annotation/annotation-processing.md)
    • JavaPoet 文档翻译
  • 图形和图像
    • Drawable使用
  • 网络
    • WebView
    • OkHttp文档翻译
      • OkHttp使用
      • OkHttp拦截器
    • Retrofit使用
    • Retrofit源码分析
    • HttpURLConnection使用
    • Volley使用
    • Volley源码分析
    • Glide使用
    • Glide源码分析
    • RxJava
  • 插件化
    • 插件化框架
    • VirtualAPK分析
  • 依赖注入
  • 开源库
    • EventBus源码分析
    • Okio概览
    • Okio菜谱
    • Okio
    • OkHttp拦截器
    • OKHttp缓存
    • Okhttp源码分析
  • 集合
    • SparseArray
    • ArrayMap
  • 架构
  • Jetpack
    • databinding adapter
    • databinding坑
    • databinding源码分析
    • Android Data Binding: Let’s Flip This Thing
    • Untitled
    • Lifecycle源码分析
    • ViewModel源码分析
    • LiveData源码分析
  • 音频和视频
    • CameraX使用
    • ExoPlayer
    • GsyVideoPlayer
  • 性能优化
    • 崩溃优化
    • 内存优化
      • LeakCanary如何工作
    • 渲染优化
    • 电池优化
    • 启动优化
    • 网络优化
    • 安装包大小优化
  • NDK开发
  • 系统源码分析
    • Android源码下载
    • Android系统启动
      • init进程启动过程
      • Zygote进程启动过程
      • Zygote进程启动流程
      • SystemServer处理过程
    • 应用程序进程启动过程
      • 应用程序进程启动过程介绍
    • Window
    • WMS
    • WindowManagerService
    • 四大组件的工作过程
      • Activity启动流程分析
      • Activity启动流程
    • ActivityManagerService分析
    • Context详解
    • Binder原理
      • Binder驱动
      • 获取ServiceManager
      • 启动ServiceManager
      • Parcel源码分析
    • Android图形系统概述
    • Choreographer原理
    • Handler使用
    • Handler源码分析
  • 逆向
    • Android抓包
    • 网易云音乐逆向
由 GitBook 提供支持
在本页
在GitHub上编辑
  1. 图形和图像

Drawable使用

Drawable是“可绘制的东西”的一般抽象。大多数情况下,您将处理Drawable作为将东西绘制到屏幕上的资源类型; Drawable类提供了一个通用API,用于处理可能采用各种形式的底层可视资源。与视图不同,Drawable没有任何设备可以接收事件或以其他方式与用户交互。

除了简单的绘图之外,Drawable还提供了一些通用的机制,以便客户端与所绘制的内容进行交互:

  • 必须调用setBounds(Rect)方法来告诉Drawable绘制的位置以及它应该有多大。所有的Drawable都应该遵循所请求的大小,通常只需缩放它们的图像。客户端可以使用getIntrinsicHeight()和getIntrinsicWidth()方法找到一些Drawable的首选大小。

  • getPadding(Rect)方法可以从一些Drawable信息返回关于如何框架放置在其中的内容。例如,一个想要作为按钮小部件的框架的Drawable将需要返回将标签正确放置在其内部的填充。

  • setState(int [])方法允许客户端告诉Drawable在哪个状态下被绘制,例如“focus”,“selected”等。一些可绘制可以根据所选状态来修改它们的图像。

  • setLevel(int)方法允许客户端提供可以修改Drawable的单个连续控制器,例如电池电量或进度级别。一些可绘制可以根据当前水平修改其图像。

  • Drawable可以通过Drawable.Callback界面回调其客户端来执行动画。所有客户端都应该支持这个界面(通过setCallback(Drawable.Callback)),以便动画可以工作。一个简单的方法是通过系统设施,如setBackground(Drawable)和ImageView。

虽然应用程序通常不可见,但Drawable可能采用各种形式:

  • Bitmap:最简单的Drawable,PNG或JPEG图像。

  • Nine Patch:PNG格式的扩展允许它指定有关如何拉伸和放置内容的信息。

  • Vector:在XML文件中定义的一个drawable作为一组点,线和曲线及其关联的颜色信息。可以缩放这种类型的可绘制,而不会损失显示质量。

  • Shape:包含简单的绘图命令而不是原始位图,允许它在某些情况下更好地调整大小。

  • Layers:一个复合的drawable,它可以在彼此之上绘制多个底层可绘图。

  • States:根据其状态选择一组可绘图之一的复合绘制。

  • Levels:根据其级别选择一组可绘图之一的复合绘图。

  • Scale:一个单个可绘制单元的复合绘制,其总体尺寸根据当前水平进行修改。自

定义可绘制

所有版本的Android允许在运行时扩展和使用Drawable类代替框架提供的可绘制类。从API 24开始,可以在XML中使用自定义可绘图类。注意:自定义可绘制类只能在应用程序包中访问。其他应用程序将无法加载它们。至少,自定义drawable类必须在Drawable上实现抽象方法,并且应该覆盖Draw(Canvas)方法来绘制内容。可以以多种方式在XML中使用自定义可绘制类:

  • 将完全限定类名用作XML元素名称。对于此方法,自定义drawable类必须是公共顶级类。

 <com.myapp.MyCustomDrawable xmlns:android="http://schemas.android.com/apk/res/android"
     android:color="#ffff0000" />

使用drawable作为XML元素名称,并从类属性中指定完全限定类名。此方法可用于公共顶层类和公共静态内部类。

 <drawable xmlns:android="http://schemas.android.com/apk/res/android"
     class="com.myapp.MyTopLevelClass$InnerCustomDrawable"
     android:color="#ffff0000" />
上一页图形和图像下一页网络

最后更新于3年前