ScrollView在初始化滚动条在某一位置的时候为什么非得开一个线程?还有就是scrollTo与smoothScrollTo的区别是什么?
2015-05-11 16:36
519 查看
private Handler handler;
public HorizontalScrollView HSV;
private Runnable runnable = new Runnable(){
public void run() {
HSV.smoothScrollTo(3*266, 210);
}
};
handler=new Handler();
handler.post(runnable);
第一,handler.post(runnable);并不是新开线程,只是让UI主线程去并发执行run()方法。
第二,之所以放在handler里,是为了保证View都已经绘制完成。不然,你放在resume()中执行,应该也可以的。
第三,smoothScrollTo类似于scrollTo,但是滚动的时候是平缓的而不是立即滚动到某处。另外,smoothScrollTo()方法可以打断滑动动画。
它只是让UI主线程去间断的执行run()方法。你可以在run()方法内部打印执行时的线程名称,会发现是相同的。
0
能证明一下怎么保证View绘制完成么?
0
初始化时,Handler内的方法是会在onCreate方法执行完成之后才执行的。简单的打印观察就可以发现。View的绘制过程是:onMeasure(计算)、onLayout(布局)、onDraw(绘制)。至于其它更深入的东西,你可以参考官方API。
public HorizontalScrollView HSV;
private Runnable runnable = new Runnable(){
public void run() {
HSV.smoothScrollTo(3*266, 210);
}
};
handler=new Handler();
handler.post(runnable);
第一,handler.post(runnable);并不是新开线程,只是让UI主线程去并发执行run()方法。
第二,之所以放在handler里,是为了保证View都已经绘制完成。不然,你放在resume()中执行,应该也可以的。
第三,smoothScrollTo类似于scrollTo,但是滚动的时候是平缓的而不是立即滚动到某处。另外,smoothScrollTo()方法可以打断滑动动画。
它只是让UI主线程去间断的执行run()方法。你可以在run()方法内部打印执行时的线程名称,会发现是相同的。
0
能证明一下怎么保证View绘制完成么?
0
初始化时,Handler内的方法是会在onCreate方法执行完成之后才执行的。简单的打印观察就可以发现。View的绘制过程是:onMeasure(计算)、onLayout(布局)、onDraw(绘制)。至于其它更深入的东西,你可以参考官方API。
相关文章推荐
- scrollTo与smoothScrollTo的区别
- scrollTo与smoothScrollTo的区别
- 在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?
- 在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别?
- 什么是线程?它与进程的区别?为什么要使用多线程?
- ListView smoothScrollToPositionFromTop 偶现滚动位置不精确问题解决办法
- Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?
- 什么是线程?它与进程有什么区别?为什么要使用多线程?
- 编译的时候生成.g.cs还有.g.i.cs,有什么区别?
- std::cout 与 cout 有什么区别 // cout有些时候为什么前面要加std
- (转)当别人努力的时候,你在做什么? 评论事情的一种态度 当你在抱怨的时候,为什么不想想我做了什么? 把简单的原则坚持贯彻下去 消极的心态,养成了惯性的思维,一切都是不好的。 也许这就是人性的弱点,不经意的习惯,却逐渐腐蚀了你的人生。
- javascript – 为什么null是一个对象,null和undefined之间有什么区别?(最通俗的解释,推荐)
- 什么是线程?它与进程的区别?为什么要使用多线程?
- JAVA在定义一个方法的时候,不用public和用public有什么区别?
- java,web应用中,关于多用户访问,是不是就是一个用户等于一个线程? 50 那一般的时候是多用户多线程还是多用户单线程。 6S根本停不下来 | 浏览 2065 次 我有更好的答案 发布于2016-
- 启动一个线程是用run()还是start()?有什么区别?
- 笔记6 | 从源码理解分析mScrollX和mScrollY,scrollTo()和scrollBy(),smoothScrollTo和smoothScrollBy
- 向一个table 插入数据的时候,为什么会从该table所分配的第四个block开始,预留的3个block是干什么用的?
- scroll、scrollBy和 scrollTo三种方法定位滚动条位置
- 什么是线程?它与进程有什么区别?为什么要使用多线程