ScroolView的初步了解

一段文本一个屏幕装不下的话,就要用到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里面  啊啊啊啊  再看看资料去  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值