Android ScrollView简单自动滚动问题总结
来源:互联网 发布:淘宝基础版导航栏全屏 编辑:程序博客网 时间:2024/05/17 22:30
今天参考网上的资料写了一个简单的动画,刚开始的时候,确实困难重重:
1、当我们在Activity里面获得View对象的时候,无论是getMeasuredHeight()还是getHehgit()方法(放在Activity里的onCreate,onStart,onResum),返回值一律为零。
2、无法使ScrollView的内容从最底部开始向上滑动(一开始ScrollView为空白,但是内容由下向上慢慢上移)
3、对ScrollView的scrollBy与scrollTo方法区别不是太熟悉;
在网上查询资料:
1. 在一个类初始化时,即在构造函数当中是得不到View的实际大小的(这个我测试过,的确)。大家可以试试,getWidth()和getMeasuredWidth()得到的结果都是0,但是可以从onDraw()方法或者dispatchDraw()方法里面获得。可以通过调用invalidate()来执行onDraw()和dispatchDraw()方法。
2. 这两个方法所得到的结果的单位是像素即pixel
getWidth(): View在设定好布局后,整个View的宽度
getMeasuredWidth():对View上的内容进行测量后得到的View内容占据的宽度。前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0);(measure参数的值可以知己定义),否则得到的结果和getWidth()得到的结果是一样的。
这两个方法最主要的区别在于,是否使用了measure()方法,同时measure()使用的位置也很重要。
getHeight() 和 get MeasuredHeight() 区别同理。
scrollTo() 是直接指定滚动条的位置, 但是由于这个动作不是单纯关于 ScrollView 而已, 还要根据 ScrollView 里面包含的View 的实际信息. 所以这动作必须在页面加载完成以后才能执行. 在Activity 初始化过程中, 要指定滚动条位置, 必须用下面的代码
- sView.post(new Runnable() {
- @Override
- public void run() {
- sView.scrollTo(sViewX, sViewY);
- }
- });
滚动代码如下:
- public class MainActivity extends Activity {
- private final Handler mHandler = new Handler();
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- iniHolder();
- }
- private void iniHolder() {
- Holder.scroll = (ScrollView) findViewById(R.id.sv_scroll);
- Holder.mlayout = (LinearLayout) findViewById(R.id.l_test);
- Holder.tv_null = (TextView) findViewById(R.id.tv_null);
- Holder.tv_null.setHeight(getWindowManager().getDefaultDisplay()
- .getHeight() - 50);
- }
- @Override
- protected void onResume() {
- super.onResume();
- System.out.println(Holder.mlayout.getMeasuredHeight() + ":"
- + Holder.scroll.getHeight());
- Holder.scroll.post(ScrollRunnable);
- }
- private Runnable ScrollRunnable = new Runnable() {
- @Override
- public void run() {
- int off = Holder.mlayout.getMeasuredHeight()
- - Holder.scroll.getHeight();// 判断高度,ScrollView的最大高度,就是屏幕的高度
- if (off > 0) {
- Holder.scroll.scrollBy(0, 2);
- if (Holder.scroll.getScrollY() == off) {
- Thread.currentThread().interrupt();
- } else {
- mHandler.postDelayed(this, 10);
- }
- }
- }
- };
- static class Holder {
- static ScrollView scroll;
- static LinearLayout mlayout;
- static TextView tv_null;
- }
- }
- Android ScrollView简单自动滚动问题总结
- ScrollView简单自动滚动问题总结
- ScrollView简单自动滚动问题总结
- ScrollView简单自动滚动问题总结
- ScrollView自动滚动问题解决方法
- android 实现ScrollView自动滚动
- Android ScrollView水平自动滚动
- ScrollView中EditText导致自动滚动问题
- ScrollView中EditText导致自动滚动问题
- ScrollView中EditText导致自动滚动问题
- ScrollView中EditText导致自动滚动问题
- android ScrollView 解决自动滚动到底部
- android 无限竖向自动滚动ScrollView
- android scrollview 嵌套自适应 listview 自动滚动
- Android 利用ScrollView实现布局自动滚动
- android:防止ScrollView自动滚动到底部
- Android开发-ScrollView简单实现滚动-AndroidStudio
- 【android】 scrollview添加子view之后,不自动滚动的问题,解决方案
- extern关键字
- Ext配置对象
- hdu 5142 NPY and FFT
- hdu4135Co-prime 容斥原理水题
- 对开发者有益的网站
- Android ScrollView简单自动滚动问题总结
- CIBN总结
- error while loading shared libraries: xxx.so.x"错误的原因和解决办法
- iframe父页面随子页面高度的增加而增加
- Tessellation
- GuozhongCrawler系列教程 (3) PageProcessor详解
- hdu 2123 An easy problem
- Linux系统的在线求助man page 与info page
- 修改opencv源码的方法