ScrollView重写实现监听

  1 package com.ft.mysinaweibo;
  2
  3 import java.lang.reflect.Field;
  4 import java.lang.reflect.Method;
  5
  6 import android.content.Context;
  7 import android.os.Handler;
  8 import android.util.AttributeSet;
  9 import android.util.Log;
 10 import android.view.GestureDetector;
 11 import android.view.GestureDetector.SimpleOnGestureListener;
 12 import android.view.MotionEvent;
 13 import android.view.View;
 14 import android.webkit.WebView;
 15 import android.widget.AbsListView.OnScrollListener;
 16 import android.widget.ScrollView;
 17 import android.widget.Scroller;
 18
 19 /**
 20  * 自定义ScrollView,解决: 1. ScrollView嵌套ViewPager,导致ViewPager不能滑动的问题 2.
 21  * ScrollView源码并没有实现滚动监听,所以我们必须自行实现对ScrollView的监听,
 22  * 我们很自然的想到在onTouchEvent()方法中实现对滚动Y轴进行监听 ScrollView的滚动Y值进行监听
 23  *
 24  */
 25 public class CustomScrollView extends ScrollView {
 26     private GestureDetector mGestureDetector;
 27     private int Scroll_height = 0;
 28     private int view_height = 0;
 29     protected Field scrollView_mScroller;
 30     private static final String TAG = "CustomScrollView";
 31
 32     private OnScrollListener onScrollListener;
 33     private int lastScrollY;// ScrollView在Y方向滑动的最后距离
 34
 35     public CustomScrollView(Context context, AttributeSet attrs) {
 36         super(context, attrs);
 37         // mGestureDetector = new GestureDetector(context, new
 38         // YScrollDetector());
 39         setFadingEdgeLength(0);
 40     }
 41
 42     // --------------------------------------------------------------------------//
 43     /**
 44      * 设置滚动接口
 45      *
 46      * @param onScrollListener
 47      */
 48     public void setOnScrollListener(OnScrollListener onScrollListener) {
 49         this.onScrollListener = onScrollListener;
 50     }
 51
 52     /**
 53      * 用于用户手指离开MyScrollView的时候获取MyScrollView滚动的Y距离,然后回调给onScroll方法中
 54      */
 55     private Handler handler = new Handler() {
 56
 57         public void handleMessage(android.os.Message msg) {
 58             int scrollY = CustomScrollView.this.getScrollY();
 59
 60             // 此时的距离和记录下的距离不相等,在隔5毫秒给handler发送消息
 61             if (lastScrollY != scrollY) {
 62                 lastScrollY = scrollY;
 63                 handler.sendMessageDelayed(handler.obtainMessage(), 5);
 64             }
 65             if (onScrollListener != null) {
 66                 onScrollListener.onScroll(scrollY);
 67             }
 68
 69         };
 70
 71     };
 72
 73     /**
 74      * 滚动的回调接口
 75      */
 76     public interface OnScrollListener {
 77         /**
 78          * 回调方法, 返回MyScrollView滑动的Y方向距离
 79          */
 80         public void onScroll(int scrollY);
 81     }
 82
 83
 84
 85     @Override
 86     public boolean onTouchEvent(MotionEvent ev) {
 87         int scrollY = getScrollY();
 88
 89         // 此时的距离和记录下的距离不相等,在隔5毫秒给handler发送消息
 90         if (lastScrollY != scrollY) {
 91             lastScrollY = scrollY;
 92             handler.sendMessageDelayed(handler.obtainMessage(), 5);
 93         }
 94         if (onScrollListener != null) {
 95             onScrollListener.onScroll(scrollY);
 96         }
 97         return super.onTouchEvent(ev);
 98     }
 99
100 }
101
102  
时间: 2024-08-26 21:45:15

ScrollView重写实现监听的相关文章

ScrollView滑动的监听

ScrollView滑动的监听 有时候我们需要监听ScrollView的滑动事件,来完成业务需求. 第一种: 可以直接实现OnTouchListener接口,在这里面写你所需要的操作 scrollView.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_MO

ImageView 会盖掉ScrollView的OnTouchListener,监听Activity的手势

当Activity的高度不够滑动的时候,ImageView会盖掉ScrollView的OnTouchListener监听. 这个时候需要设置Activity的(或者想直接监听Activity的手势也可以这样设置) @Override public boolean dispatchTouchEvent(MotionEvent ev){ super.dispatchTouchEvent(ev); return productGestureDetector.onTouchEvent(ev); } Im

ScrollView的滑动监听(以HorizontalScrollView为例)

ScrollView不能像其他组件一样使用onScrollChanged()方法是因为它用protected封装了 protected void onScrollChanged(int x, int y, int oldx, int oldy); 想要实现监听需要简单自定义组件. 1:自定义组件 public class ObservableScrollView extends HorizontalScrollView { private ScrollViewListener scrollVie

自定义ScrollView,实现ScrollView滑动监听并记录滑动位置。

Android自带的ScrollView对于滑动监听接口没有开放,然而在许多时候记录ScrollView的滑动位置,实现这个功能比较简单,自己实现一个ObserveScrollView类来继承ScrollView,然后重写里面的onScrollChanged(int l, int t, int oldl, int oldt)方法,本方法就是ScrollView的滑动监听,接着声明一个接口,在重写的方法里利用接口回调,将滑动的数据传出去. onScrollChanged(int l, int t,

Android监听ScrollView滑动到顶端和底部

MainActivity如下: package cn.testscrollview; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ScrollView; import android.app.Activity; /** * Demo描述: * 监

Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果

我之前写了一篇关于美团网,大众点评的购买框效果的文章Android对ScrollView滚动监听,实现美团.大众点评的购买悬浮效果,我自己感觉效果并不是很好,如果快速滑动界面,显示悬浮框的时候会出现一卡的现象,有些朋友说有时候会出现两个布局的情况,特别是对ScrollView滚动的Y值得监听,我还使用了Handler来获取,还有朋友给我介绍了Scrolling Tricks这个东西,我下载试了下,确实美团网,大众点评的购买框用的是这种效果,但是Scrolling Tricks只能在API11以上

vs xamarin android 监听返回键退出程序

public override bool OnKeyDown([GeneratedEnum]Keycode keyCode, KeyEvent e) { if (keyCode == Keycode.Back) { Finish(); System.Environment.Exit(0); } return base.OnKeyDown(keyCode, e); } 在activity中重写OnKeyDown监听.

通过重写OnScrollListener来监听RecyclerView是否滑动到底部

为了增加复用性和灵活性,我们还是定义一个接口来做监听滚动到底部的回调,这样你就可以把它用在listview,scrollView中去. OnBottomListener package kale.com.waterfall; /** * @author Jack Tony * @brief * @date 2015/4/6 */ public interface OnBottomListener { public void onBottom(); } 接着,我们来重写RecyclerView.O

Android 监听ScrollView的滑动

我们需要监听ScroView的滑动情况,比如滑动了多少距离,是否滑到布局的顶部或者底部.可惜的是SDK并没有相应的方法,不过倒是提供了一个 protected void onScrollChanged(int l, int t, int oldl, int oldt) 显然这个方法是不能被外界调用的,因此就需要把它暴露出去,解决方式就是写一个接口 /** * Created by 刘楠 on 2016/8/21 0021.17:24 */ public interface ScrollViewL