2 piternb piternb 于 2012.09.07 17:06 提问

Android SurfaceHolder的lockCanvas方法

我首先Rect mRect = new Rect(0,0,47,65);
然后Canvas mCanvas = holder.lockCanvas(mRect);
我通过debug发现,当执行完lockCanvas后,mRect的left、top、right、bottom值变成了0,0,320,480。
各位大虾们,求解释。。。

6个回答

franzhong
franzhong   2012.10.09 15:03
已采纳

Surface由于采用了双缓冲,防止脏矩形出现就是刷新不到的地方存在,你设置的这个小Rect会被resize,机制决定

laxila
laxila   2012.09.07 17:29

SurfaceHolder, lockCanvas后就是获得canvas的大小并锁定canvas。canvas就是surface的大小,大部分情况下和手机分辨率一样大。mRect的值是正确的,就是你要获取的canvas的位置和大小。

chenchenfly
chenchenfly 回复chenchenfly:
2 年多之前 回复
chenchenfly
chenchenfly 回复piternb:
2 年多之前 回复
piternb
piternb 这是真正调用的lockcanvas函数,你看是不是作为返回的? java的参数都是引用,凡是引用的,都是可以当做[out]熟悉,也就是当返回值带回的。 函数返回值只能返回一个,如果要返回多个,就得靠指针或引用。 具体见回答的代码:
5 年多之前 回复
laxila
laxila 这个方法中的rect不是参数,是做返回值用的
5 年多之前 回复
piternb
piternb lock的应该是Rect的大小,怎么会变成屏幕大小?
5 年多之前 回复
suannai0314
suannai0314   2012.09.07 17:17

lock的是整个view的大小,也就是说,你view里ondraw来用canvas绘制,那这个canvas对应的lock就是整个view。

piternb
piternb 有什么地方不明白呢
5 年多之前 回复
qazwsx132656526
qazwsx132656526   2015.08.31 19:59

Surface由于采用了双缓冲,防止脏矩形出现就是刷新不到的地方存在,你设置的这个小Rect会被resize,机制决定

u010646502
u010646502   2016.04.20 16:51

Surface由于采用了双缓冲,防止脏矩形出现就是刷新不到的地方存在,你设置的这个小Rect会被resize,机制决定

u1254z62
u1254z62   2017.01.03 18:10

lock的是整个view的大小,也就是说,你view里ondraw来用canvas绘制,那这个canvas对应的lock就是整个view。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!