一段文本一个屏幕装不下的话,就要用到ScroolView
如下代码
<ScrollView
android:id="@+id/scroll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"
>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"/>
</ScrollView>
如果改为<HorizontalScrollView>就是水平滚动的
android:scrollbars="none" 表示影藏滚动条
判断是否滑动到顶部,或者底部可以使用一下几个方法
/**
* 1.getScrollY();滑动条滑动的距离
* 2.getMeasuredHeight;整个文本的高度
* 3.getHeight;屏幕的高度
*/
方法如下
scroll.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
/**
* 1.getScrollY();滑动条滑动的距离
* 2.getMeasuredHeight;整个文本的高度
* 3.getHeight;屏幕的高度
*/
//滚动条滚动0
if(scroll.getScrollY()<=0){
Log.d(TAG, "顶部");
}
//屏幕高度加上滚动条滚动距离为文本总高度时,到底部
if((scroll.getScrollY()+scroll.getHeight()) >= scroll.getChildAt(0).getMeasuredHeight()){
Log.d(TAG, "底部");
Log.d(TAG, scroll.getChildAt(0).getMeasuredHeight()+"--文本高度");
Log.d(TAG, scroll.getHeight()+"--屏幕高度");
Log.d(TAG, scroll.getScrollY()+"--滚动条滚动距离");
tv.append(getResources().getString(R.string.text));//到底部就添加新的文本
}
break;
default:
break;
}
return false;
}
});
scroll.getChildAt(0).getMeasuredHeight() 为scroll里面的text的文本高度
还有两个方法
mScroll.scrollBy(0, 30); //移动 y向下移动30,
mScroll.scrollTo(0, 30); //移动到点(0,30)
还有个问题,如何保存上一次阅读的地方
一开始以为很简单,在离开的时候将坐标保存,下一次打开再直接拿出来,结果发现不行,方法如下
/**
* 该活动暂停时保持srollY
*/
@Override
protected void onPause() {
super.onPause();
editor.putInt("last_Y", mScroll.getScrollY());
editor.commit();
}
取出,并跳转(在onCreate中)
<span style="white-space:pre"> </span>lastY = pref.getInt(LAST, 0);
mScroll.scrollBy(0, lastY);
发现这样搞不行,后来google了一下,原来得这样
mScroll.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
mScroll.scrollBy(0, lastY);
}
});
该方法不能马上用,要先放到队伍里面等待,待其他组件初始化完毕后再使用 不是很理解呀 啊啊啊 啊啊
好像之前学的在子线程里面不能更新UI,必须使用handler将更新的指令传到queen里面 啊啊啊啊 再看看资料去