对View设置rightPadding后,发现ScrollBar绘制的位置发生了变化。为知其缘由,需要来看看View的绘制。

View绘制的是从draw(Canvas canvas)开始的,在此方法中View进行了6部分的绘制操作。其中ScrollBar的绘制是在onDrawForeground中发生的。

因为View设置的是绘制竖直方向的滚动条,所以需要分析下面的逻辑

其中computeVerticalScrollRange,computeVerticalScrollOffset,computeVerticalScrollExtent方法决定了ScrollBar是否显示,ScrollBar的大小。当需要自己控制ScrollBar绘制时,这三个方法是有必要重写的。

当ScrollBar的大小确定后,ScrollBar在View中的位置是由getVerticalScrollBarBounds的来实现的,并通过getStraightVerticalScrollBarBounds来实现的最后的定位。

在对ScrollBar的位置定位时,可以看见left的坐标点中会减去(mUserPaddingRight & inside)的值。mUserPaddingRight的值正是View的paddingRight。而inside的是通过ScrollBarStyle来实现的。在Java中可以通过setScrollBarStyle来设置,xml文件中通过scrollbarStyle标签来自定义。

scrollbarStyle的值有SCROLLBARS_INSIDE_OVERLAY,SCROLLBARS_INSIDE_INSET,SCROLLBARS_OUTSIDE_OVERLAY,SCROLLBARS_OUTSIDE_INSET四种取值。对于这四种值的说明百度有很多说明,这里不再展开。

View绘制之ScrollBar绘制相关推荐

  1. 【Android自定义View】Bitmap的绘制和颜色滤镜

    前言 Bitmap在开发中是经常遇到的,因为他用到的地方有很多,比如Android的图片预览,自定义相机,自定义美颜相机,图片滤镜,图像算法....,既然使用场景这么多,今天就先讲一下Android中 ...

  2. 【5年Android从零复盘系列之十七】Android自定义View(12):手势绘制及GestureOverlayView事件详解(图文)

    [5年Android从零复盘系列之十七]Android自定义View(12):手势绘制及GestureOverlayView事件浅析 1.基础 掌握View体系事件分发与处理,参考Android自定义 ...

  3. 自定义View之——风车的绘制

    由于本人使用的华为手机,真是被华为天气的界面圈粉,之前有仿写了其中一个自定义的view,今天带来另一个自定义view,就是其中的风车,先上图 相信大家在其它很多天气软件就看到过. 一.概述 在图中,风 ...

  4. 【opencv图像处理】--2. 颜色空间,绘制图形,绘制(中文)文本

    "人群里敞着一扇门" 1. 颜色空间的基础知识 1.1 色彩空间转换 2. mat数据结构的深浅拷贝 ndarray的常见属性 3.颜色通道的分离和合并 4. 绘制图形 5. 绘制 ...

  5. 【OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )

    文章目录 一.绘制单个点 二.绘制多个点 三.相关资源 在上一篇博客 [OpenGL]十.OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | ...

  6. html5 绘制图形,HTML5绘制几何图形

    绘制几何图形 var canvas = document.getElementById("myCanvas"); var ctx = canvas.getContext(" ...

  7. OPenGL实例化绘制、普通绘制说明

    OpenGL 实例化(Instancing)是一种只调用一次渲染函数就能绘制出不少物体的技术,能够实现将数据一次性而不是多次发送给 GPU ,告诉 OpenGL使用一个绘制函数,将这些数据绘制成多个物 ...

  8. python turtle绘制柱状图_python绘制图形(Turtle模块)

    用python的Turtle模块可以绘制很多精美的图形,下面简单介绍一下使用方法. 需要用到的工具有python,python 的安装这里就不再细说.自行搜索. from turtle import ...

  9. ue4 unreal4 自定义网格 绘制自定义网格 绘制面 (Plus)

    额四月份写了 CustomMeshComponent 用于创建自定义网格 ue4 unreal4 自定义网格 绘制自定义网格 绘制面_ljason1993的博客-CSDN博客 当时想着找时间写个 Pr ...

最新文章

  1. mssql 插入数据缓慢_SQLPro Studio for Mac(数据库管理器)
  2. Redis可视化工具 Redis Desktop Manager
  3. 减少静态链接库的体积
  4. mysql 读取comment_Mysql 获取表的comment 字段
  5. CH 5102Mobile Service题解
  6. Linux 基础——权限管理命令chown、chgrp
  7. 抓包神器之Charles,常用功能都在这里了
  8. LINUX使用sig文件验证文件的签名
  9. request.form 和 Request.QueryString 区别
  10. GRE 9月15日机经
  11. 移动端自动化测试:python+appium+pytest+allure+yaml
  12. 高等数学 —— 二元函数极值存在定理与拉格朗日乘数法求最值
  13. 微信小程序登录界面 服务器,微信小程序之登录页-------实例
  14. MongoDB实验——数据库基本操作(头歌)
  15. ico图标制作的在线工具
  16. 解决ROS编译时opml库找不到
  17. 「兔了个兔」龟兔赛跑——乌龟和兔子能否相遇?
  18. 湖南省中职学业水平考试复习试题(数学)
  19. c++ emplace_back和push_back的异同
  20. Using the Iframe to implement the Ajax

热门文章

  1. Mybatis笔记一
  2. C语言float变量精度,float部类的精度究竟是多少
  3. 无法播放 请确保您计算机的,解决win10 groove无法播放并提示“0x8007007e”的方法...
  4. fingerGgesture
  5. Java jre的安装与卸载
  6. php获取谷歌地图gps定位,谷歌地图 API 开发之获取当前坐标(经纬度)
  7. 豆瓣相册下载助手,在这里记录分享一下
  8. SQL语法之SQL 通配符
  9. 超级思维:高效解决问题的 20 个思维模型
  10. FL Studio 中的 Fruity Compressor 效果器功能介绍