Android-ScrollView(基本实现,顶部判断,底部判断,底部加载更多)

本文详细介绍了ScrollView的使用方法,包括滚动视图的类型、关键属性和方法,如设置滚动条的出现、获取滚动距离等,并通过实例展示了如何在ScrollView中实现判断顶部和底部的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值