【第22期】观点:IT 行业加班,到底有没有价值?

ScrollView简单自动滚动问题总结

原创 2012年03月23日 20:58:45

今天参考网上的资料写了一个简单的动画,刚开始的时候,确实困难重重:

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() 区别同理。




经过我的测试(不知道有没有别的方法),ScrollView是不能开始就显示在最底层的,只能在最上面添加一个控件,这里我添加了一个TextView空的空间,这样在开始显示的ScrollView的时候,是空的,感觉是内容慢慢开始向上移动




 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;
	}
}



版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

iOS中scrollview自动滚动的实现

原问题是,我要展现给用户的内容放在scrollview中,让内容从上到底自动滚动,我最开始用的是DDAutoscrollview,但是无法实现。 一种解决方案见下边,更多解决方案见:http://a...

解决Android中,禁止ScrollView内的控件改变之后自动滚动

问题: 最近在写一个程序界面,有一个scrollVIew,其中有一段内容是需要在线加载的。 当内容加载完成后,ScrollView中内容的长度会发生改变,这时ScrollView会自动下滚,如下图所示...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Android 控制ScrollView滚动到底部

在开发中,我们经常需要更新列表,并将列表拉倒最底部,比如发表微博,聊天界面等等, 这里有两种办法,第一种,使用scrollTo():这种方法较为麻烦,现在直接使用第二种:scrollView.full...

ScrollView滚动到指定位置

ScrollView滚动到指定位置一:问题描述 最近在项目中遇到一个问题,需要通过点击几个按钮在scrollview中不断切换滚动到指定位置。二:解决办法 首先想到的是用ScrollView.scro...

HorizontalScrollView 自动滑动

从事开发Android,坑人的就是设备的差异性,相同的功能在相同的生产厂商不同的版本设备,或者是不同的生产厂商的设备实际效果具有差异性,最近在项目里面用到HorizontalScrollView功能,...

解决HorizontalScrollView自动滑动问题

解决HorizontalScrollView自动滑动问题最近做的项目中遇到一个关于HorizontalScrollView的问题,一开始的布局是一个textview外面嵌套了一个HorizontalS...

控制ScrollView的自动滚动速度

因为ScrollView的scrollTo是直接滑到位置,而自带的smoothScrollTo还是太快了,0.25秒就滑到目标位置了,都不符合要求。 所以使用以下的方法自定义: Android里Scr...

ScrollView滚动到指定位置 (平滑 慢速 动画)

首先 private Runnable runnable = new Runnable() { @Override public void run() { ...

Android平滑移动——Scroller类研究

Scroller是Android中View平滑移动的一个辅助类,对于刚接触Scroller的人群来说它可能难以理解: 1、它是怎样滑动View的(如何与View关联的)? 2、又是谁触发了它? 其实...

禁止ScrollView自动滚动

本帖最后由 ylei0514 于 2013-1-15 11:55 编辑 最近在做一个东西,在scrollview中动态添加edittext,然后点击edittext弹出自定义的键盘,完了还要把对应的...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)