1.回顾
上篇学习了 ViewFlipper 的使用,实现了图片轮播 和 使用了 OnTonchListener 事件
2.重点
(1)ScrollView
(2)属性和方法
(3)实例-判断顶部和底部
(4)getScrollY() 一直为1.0 的 问题
3. ScrollView
滚动视图 :分为 横向滚动视图( 水平 滚动视图)
: <HorizontalScrollView ></HorizontalScrollView>
纵向滚动视图
:默认:ScrollView
4. 属性和方法
(1)重要属性
设置 滚动条的出现 :
android:ScrollBar="none"
代码设置:
setVertivalScrollBarEnabled(false);
(2)方法
setOnTouchListener (案列 :底部加载更多)
getScrollY() : 滚动条滑动的距离
getMeasuredHeight() : 当前ScrollView 所在的页面大小
getHeight() :ScrollView 的高度
5.实现
5.1 布局实现
ScrollView 只能 有一个 子布局 ;
<ScrollView
android:id="@+id/scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:scrollbars="none"
>
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scroll_content" />
</ScrollView>
5.2 OnTouchListener 实现
private int flag=0;
class ScrollOnTonchListener implements OnTouchListener{
@SuppressLint({ "NewApi", "ClickableViewAccessibility" })
@Override
public boolean onTouch(View v, MotionEvent event) {
//手势监听事件
//和 ViewFlipper 一样 需要判断 才能知道 怎么滑动
switch (event.getAction()) {
//移动的时候去判断;
case MotionEvent.ACTION_MOVE:
int h=scroll.getScrollY();
int t=scroll.getHeight()+h;
Log.i("scroll","scroll.getChildAt(0).getMeasuredHeight()="+scroll.getChildAt(0).getMeasuredHeight());
Log.i("scroll","scroll.getHeight()="+scroll.getHeight());
Log.i("scroll","scroll.getScaleY())="+h);
Log.i("scroll","scroll.getHeight()+(int)scroll.getScaleY()="+t);
//到顶部了
if(h<=0){
flag++;
if(flag%3==0){
Toast.makeText(getApplicationContext(), "到顶部了",Toast.LENGTH_SHORT).show();
}
}
//textview的高度 大于等于 滑动的大小+控件的大小时 到底部
if(scroll.getChildAt(0).getMeasuredHeight()<=t){
flag++;
if(flag%3==0){
Toast.makeText(getApplicationContext(), "到底部了",Toast.LENGTH_SHORT).show();
tv.append(getResources().getString(R.string.scroll_content));
}
}
break;
}
return false;
}
}
5.3 设置监听
scroll=(ScrollView) findViewById(R.id.scroll);
tv=(TextView) findViewById(R.id.tv);
scroll.setOnTouchListener(new ScrollOnTonchListener());
5.4 string.xml 数据
我们已 %%%%%%%%%%%%%%%%%%%%%%%%% 为分界线,来分页;
<string name="scroll_content">
虽然我们彼此分隔异地,但因为爱情,所以我们距离很近。在每一个入睡的晚上,跟你说声晚安;在每一个醒来的早上,和你说声早安。
爱情不是奇遇,可是当我们在这样的奇遇中有了爱情,却早已注定了分离.适合走到最后的人,从一开始就是为了彼此而生的。
男人的心如铁树开花,一千年一次。据说,铁树开花不是好兆头。如果花败,一生无爱。女人的心如雪莲花,纯洁而柔爱,并且奇美。据说,雪莲花开在天山最高的地方。如果花败,一生白发。哀莫大于心死,所以在爱情路上,千万要走好,不要回头,但走完之后不后悔。
生命中,有些人,一旦遇见,便一眼万年;有些心动,一旦开始,便覆水难收;有些情,一旦眷恋,便海枯石烂;有些缘分,一旦交织,便在劫难逃。
爱情不合乎逻辑,这或许就是爱的逻辑。真正热爱的,或许并不是一个大家公认的最该爱,爱的最正确的人,而是一个使我忘乎所以,无法不爱的人。爱不是因为被爱,只是因为爱。
为什么你会为爱情而改变,只是因为,你害怕失去。当你恐惧失去一个人的时候,就会为他做很多,为他而改变自我。所以相爱的基础,并不是感情,而是恐惧,是没有办法失去彼此。当这种恐惧消失的时候,那就是不再爱了。所以,相爱就是害怕失去。没有害怕,就没有相爱。
我相信除了寂寞,缘分是男人和女人之间相爱的另一种原由。因为缘分而使两颗寂寞的心结合的爱情称为真爱。寂寞是每时每刻,缘分是不知不觉,真爱是一生一世。——《花样年华》
与其久久的思念一个人,还不如面对面表白。与其不死不活的拖着,还不如赶紧换人恋爱。感情的事最怕拖,因为拖到最后,结局必然不好,但青春却被消耗殆尽了。
爱情如果不落到穿衣、吃饭、睡觉、数钱这些实实在在的生活中去,是不会长久的。真正的爱情,就是不紧张,就是可以在他面前无所顾忌地打嗝、放屁、挖耳朵、流鼻涕;真正爱你的人,就是那个你可以不洗脸、不梳头、不化妆见到的那个人。
一个人如果连自己都不珍惜,又怎会有人珍惜?许多时候,你觉得没人爱你,没人疼你,没有对你好,首先就得反思一下,你自己是否爱自己,是否疼自己,是否对自己好。自私确实不好,但完全的无私就是对自己的伤害。所以啊,爱人先爱己。你爱自己有多少,别人爱你才有多少。
真爱会败给什么?%%%%%%%%%%%%%%%%%%%%%%%%% </string>
5.5 效果图预览
6. 问题
在 使用 getScrollY() 方法的时候,出现了一个纠结一个小时的问题,就是 getScrollY()的值 一直是 1.0 ,开始以为是 模拟器的问题,后再手机上测试了,还是不行;
解决:通过查看 getScrollY() 方法 ,发现它有两个 返回值 一个 int , 一个 float , 后 将值 赋值给 int 类型后,就可以使用了;而直接 相加的为 float 类型;
7.demo 下载
http://download.youkuaiyun.com/detail/lablenet/9044777