美文网首页
Android Drawable学习笔记

Android Drawable学习笔记

作者: ChrisChanSysu | 来源:发表于2019-03-01 11:49 被阅读0次

    定义

    A drawable is general abstraction for something that can be drawn.

    实例化Drawable的两种方式

    • inflate一个图片资源
    • inflate一个XML文件

    res/drawable/ 目录下的图片资源会自动被aapt无损压缩,因此实际占用的空间会更小,也正是因为这个原因,图片的二进制存储方式将改变,因此如果要用二进制流的方式读取一张图片,然后转换成bitmap,应该放到res/raw/目录下。

    VectorDrawable(Android 5.0 above)

    A VectorDrawable is a vector graphic defined in an XML file as a set of points, lines, and curves along with its associated color information

    • 根标签为<vector>由group和path构成
    • 低于Android5.0可以使用VectorDrawableCompat和AnimatedVectorDrawableCompat

    处理Bitmap

    • ALPHA_8,ARGB_8888,RGB_565代表的是1个像素的存储方式
    • 通过bitmap能够拿到Palette,可以获得图片的主色等等信息

    硬件加速

    • Application和Activitiy级别 <application> hardwareAccelerated="true"
    • window级别可以设置Flags
    • View级别设置setLayerType

    硬件加速和非硬件加速下的绘图模型

    • 非硬件加速:
      1.invalidate视图树
      2.绘制视图树
      缺点:要遍历视图树,带来非必要的操作、因为整个被涉及的视图树重绘,可能带来bug,比如重绘已经被更改的view
    • 硬件加速
      1.invalidate视图树
      2.记录并更新展示列表
      3.绘制展示列表
      优化:不需要重绘的view不会重绘,复用之前被记录的view
      缺点:会消耗video内存

    View层级

    • View.setLayerType()
      • LAYER_TYPE_NONE,默认模式,View会被正常渲染,没有off-screen buffer
      • LAYER_TYPE_HADRWARE,View会被硬件加速渲染,如果设备不支持硬件加速,会用LAYER_TYPE_SOFEWARE模式渲染
      • LAYER_TYPE_SOFTWARE,View会被软件渲染入bitmap

    OpenGL ES

    • Android支持OpenGL是通过framework API和NDK
    • 两个基类
      • GLSurfaceView
      • GLSurfaceView.Renderer接口,通过setRenderer()方法和GLSurfaceView绑定,在回调中定义GLSurfaceView如何绘制
    • 因为OpenGL会假设绘制区域是正方形的,所以需要投影转换坐标
      • Projection matrix
      • Camera transformation matrix
    • 使用OpenGL显示图形
      • 构建OpenGL ES环境:manifest声明、实现GLSurfaceView和GLSurfaceView.Renderer
      • 定义形状
      • 绘制形状
      • 应用投影和相机视图
      • 添加动画
      • 响应触摸事件

    优化

    • 减少过度绘制
    • 性能和视图层次结构
    • 使用Profile GPU Renderering进行分析

    相关文章

      网友评论

          本文标题:Android Drawable学习笔记

          本文链接:https://www.haomeiwen.com/subject/hiqkuqtx.html