2 baifenzhisan BaiFenZhiSan 于 2016.04.26 21:18 提问

本人小白问个android的问题

大概是这样的在一个按钮的onclick里面写了个这个
for(int i = 0;i<10;i++){
控件.layout(控件.getLeft()+1,控件.getTop()+1,控件.getRight()-1,控件.getBottom()-1);
控件.invalidate();
log(”*****,”~~~“);
延时;
}
logcat里是显示了十次,
但界面上为什么看起来还是只绘制最后一次移动了啊?
对不起,本人新人并没有币可以悬赏,抱歉。

5个回答

danielinbiti
danielinbiti   Ds   Rxr 2016.04.26 21:48
已采纳
 10次太快了,眼睛看不出来
 控件.invalidate();中,计算dirty重绘区域是同步方式,但最后发送重绘请求消息是个异步过程。
BaiFenZhiSan
BaiFenZhiSan 回复danielinbiti: 问题已经解决谢谢您的帮助,感谢菊苣。
一年多之前 回复
BaiFenZhiSan
BaiFenZhiSan 我是在一个循环内遍历一遍某一顺序的“指令”,每种“指令”对这个控件有着不同的重绘,不用循环的话,就没法遍历这个顺序了?大大帮帮忙QAQ
一年多之前 回复
danielinbiti
danielinbiti 回复丶百分之三丶: 别用for循环呀,在handler.postDelayed(runnable, 2000);做判断,比如if (i<10){handler.postDelayed(runnable, 2000);}
一年多之前 回复
BaiFenZhiSan
BaiFenZhiSan 抱歉手一抖发了这么多遍
一年多之前 回复
BaiFenZhiSan
BaiFenZhiSan 回复danielinbiti: 比如按下按钮执行这个循环,消息的确是在循环内间隔地传过去的,可是界面的重绘是要等待这个循环结束后才开始的啊,那时候再重绘又是一瞬间绘制完成了啊?
一年多之前 回复
BaiFenZhiSan
BaiFenZhiSan 回复danielinbiti: 这位大大,不对啊,即便一次一次间隔地传过去,重绘的时候还是一起绘制的啊
一年多之前 回复
danielinbiti
danielinbiti 回复丶百分之三丶: 采用handler.postDelayed(runnable, 2000);方式 http://blog.csdn.net/jdsjlzx/article/details/7663917
一年多之前 回复
BaiFenZhiSan
BaiFenZhiSan 请问怎么在绘制时延时从而能够看到每一步的绘制呢?
一年多之前 回复
weixin_34795569
weixin_34795569   2016.04.26 22:34

用一个handler延时循环

u012721519
u012721519   2016.04.26 23:48

做延时操作,你每次都invalidate刷新,自然会覆盖前面的。可以将时间拉长,看出效果。

baidu_23086307
baidu_23086307   2016.04.27 20:09

10次太快了,眼睛看不出来
控件.invalidate();中,计算dirty重绘区域是同步方式,但最后发送重绘请求消息是个异步过程。

CSDNXIAON
CSDNXIAON   2016.04.26 21:22

Android-00 小白遇到的第一堆问题
小白一样的表单提交问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

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