我是想实时绘图,每次响应OnTouch事件,计算偏移坐标,重新刷屏。
由于考虑绘图逻辑有点小复杂,所以绘图代码是一次性绘制整个图形的,用浏览器来形容就是我一次性绘制了整个网页。但是绘制整个内容就会相当慢。
我绘图时,先锁定Canvas后,会使用Canvas.ClipRect(),把当前屏幕大小的矩形设定为剪切区域,但是没有达到我预想的效果。
我以前做桌面程序时,C#用gdi+绘图时,设定了Clip剪切区域后,那么系统会自动分析绘图代码,把剪切区域外的绘图操作拦截下来,不会发送到图形卡去。这样的话,实际上绘图压力并没有那么大,实际上只执行了剪切区域内的绘图工作。
但是android上这么设定绘图区域,我测试发现虽然设定了剪切区域,然后再调用canvas去绘制整个区域的绘图,系统并没有能够把剪切区域外的工作省略掉,而是做完了所有的绘图工作,仅仅让剪切区域外的图形不显示出去而已。这样的话,我这么做,性能就不仅仅是一个差字了。
但是如果要是从绘图逻辑上来考虑仅仅绘制剪切区域内的图形的话,绘图逻辑就会变得很复杂。
请问
1.可有什么办法能够让系统不执行剪切区域之外的绘图工作?有什么办法来优化这个绘图操作?
2.像浏览器展示网页,ListView通过滚动展示很多列表项,这些的实现原理是什么?
3 个解决方案
#1
我后来又仔细测试了下
剪切区域倒是起作用的,处理速度可能确实比绘制全部内容要快一点吧,只是处理依然慢,没能达到预期。
剪切区域倒是起作用的,处理速度可能确实比绘制全部内容要快一点吧,只是处理依然慢,没能达到预期。
#2
http://tech.uc.cn/?p=2414
#3
这篇文章是讲浏览器渲染的,html5中canvas渲染的吧。
我是考虑android本地应用中的2d绘图的性能问题呢
#1
我后来又仔细测试了下
剪切区域倒是起作用的,处理速度可能确实比绘制全部内容要快一点吧,只是处理依然慢,没能达到预期。
剪切区域倒是起作用的,处理速度可能确实比绘制全部内容要快一点吧,只是处理依然慢,没能达到预期。
#2
http://tech.uc.cn/?p=2414
#3
这篇文章是讲浏览器渲染的,html5中canvas渲染的吧。
我是考虑android本地应用中的2d绘图的性能问题呢