YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Chinese, Simplified subtitles

← 02-12 Fixing_Overdraw_with_Canvas_API

02-12 Fixing_Overdraw_with_Canvas_API

Get Embed Code
13 Languages

Showing Revision 4 created 02/08/2016 by sp8.

  1. 好的,我们回到Android Studio
  2. 查看DroidCardsView的源文件
  3. 这是我们的自定义View
  4. 回忆一下,这个自定义View
    就是用来创建重叠纸牌的
  5. 举例说,每张牌都有自己的Bitmap
  6. 我们通过重写onDraw方法将它们绘制在屏幕上
  7. 记住,一旦重写了onDraw方法
  8. Android系统将无法对View进行渲染优化
  9. 开发者的工作就是对所有纸牌进行适当的剪辑
  10. 避免那些不必要的过度绘制
  11. 幸运的是,Canvas API为我们提供了方法
  12. 使用此方法可以更有效地绘制纸牌
  13. 我们看一下文件
  14. 我们使用canvas.clipRect方法来改进代码
  15. 我们使用这个以四个浮点数为参数的变量
  16. 好的,现在我们回到Android Studio
  17. 我们对重叠纸牌的绘制方式
    作一些调整以降低过度绘制
  18. 我将使用Android Studio
    自带的这个功能展示这个视图
  19. 这样你就可以看到代码之前的和当前的状态
  20. 好的,现在我们进入对比视图
  21. 我们特别看一下onDraw方法
    我们使用它来重新编写
  22. 左栏是循环之前的状态
  23. 我们在右栏做一些改进
  24. 当我们堆叠纸牌时
    我们分步骤对它进行改进
  25. 第一步,我们计算纸牌的方位
  26. 我们需要调用这个函数canvas.save
  27. 用来保存现在的canvas状态
  28. 换句话说
  29. 在使用clipRect API之前保存屏幕的当前状态
  30. 现在我们调用clipRect方法
  31. 其实,就是计算一些几何限制条件
  32. 当我们传入这些参数时
  33. 就是告诉系统只绘制我们想看见的那部分纸牌
  34. 显然,剩下的部分都被挡住了
  35. 现在,只有在限制边界内的那部分纸牌
  36. 才会被绘制在屏幕上
  37. 最后我们调用canvas.restore
  38. 将Canvas转化为非剪辑状态
  39. 换句话说,就是解除执行clipRect的限制条件
  40. 除了最上面的纸牌,我们其他纸牌重复此循环
  41. 特别要说的是,我们对最上面
    或者说最后一张纸牌的处理方式
  42. 与其他纸牌不同
  43. 这张牌不需要剪辑
  44. 我们按它的全貌进行绘制
  45. 看这儿的声明
  46. 好了,我们把改进过的代码组装起来
  47. 看看过度绘制有没有减少
  48. 好了,非常不错
  49. 你可以看到过度绘制减少了很多
  50. 现在大家都清楚了
    我们处理自定义View的时候
  51. Canvas API为我们提供了有效的绘制方法
  52. 如果你想进一步了解Canvas API
  53. 可以查看教程文件
  54. 这样的视图可以帮助我们
    创造独特并有吸引力的用户体验
  55. 但是要记住我们必须在系统中作出提示
  56. 帮助Android漂亮地呈现这些View
  57. 当你创建自定义View时
    一定要检查一下过度绘制
  58. 别忘了使用clipRect方法
  59. 好的,干得不错
  60. 我们把课程交给Colt
    让他为我们讲解更多性能方面的知识