博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ScrollView重写实现监听
阅读量:6950 次
发布时间:2019-06-27

本文共 3187 字,大约阅读时间需要 10 分钟。

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

 

转载于:https://www.cnblogs.com/ft039x/p/5741857.html

你可能感兴趣的文章
选型 - QA testing tools 2/26/2016
查看>>
Linux培训大纲
查看>>
X3-02 gprs 设置
查看>>
列出对像属性,for(var i in obj)[转]
查看>>
Js(DOM) 和Jq 对象的相互转换
查看>>
HDUOJ3980取模运算
查看>>
20165318 2017-2018-2 《Java程序设计》第九周学习总结
查看>>
mysql 数据库备份的多种方式
查看>>
2-范数、1-范数、···
查看>>
C#闭包函数
查看>>
浅谈vr基础视频教程 改变技术革命
查看>>
c++调用DOS命令,不显示黑屏
查看>>
python虚拟环境
查看>>
ls -l 各项含义
查看>>
Helios与Katana的区别
查看>>
python从数据库取数据后写入excel 使用pandas.ExcelWriter设置单元格格式
查看>>
Android JPush(极光推送)的使用教程
查看>>
奇异值分解(SVD)小结
查看>>
MYSQL数据库设计规范
查看>>
python之socket编程
查看>>