博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 自定义ScrollView的滑动监听事件
阅读量:5106 次
发布时间:2019-06-13

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

项目结构:

 1.LazyScrollView类(自定义ScrollView)

package android.zhh.com.myapplicationscrollview;/** * Created by sky on 2017/3/19. */import android.content.Context;import android.graphics.Rect;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.ScrollView;/** * Created by sky on 2017/3/17. */public class LazyScrollView extends ScrollView {    private static final long DELAY = 100;    private int currentScroll;    private Runnable scrollCheckTask;    /**     * @param context     */    public LazyScrollView(Context context) {        super(context);        init();    }    /**     * @param context     * @param attrs     */    public LazyScrollView(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    /**     * @param context     * @param attrs     * @param defStyle     */    public LazyScrollView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        init();    }    private void init() {        scrollCheckTask = new Runnable() {            @Override            public void run() {                int newScroll = getScrollY();                if (currentScroll == newScroll) {                    if (onScrollListener != null) {                        onScrollListener.onScrollStopped();                    }                } else {                    if (onScrollListener != null) {                        onScrollListener.onScrolling();                    }                    currentScroll = getScrollY();                    postDelayed(scrollCheckTask, DELAY);                }            }        };        setOnTouchListener(new OnTouchListener() {            @Override            public boolean onTouch(View v, MotionEvent event) {                if (event.getAction() == MotionEvent.ACTION_UP) {                    currentScroll = getScrollY();                    postDelayed(scrollCheckTask, DELAY);                }                return false;            }        });    }    public interface OnScrollListener {        public void onScrollChanged(int x, int y, int oldX, int oldY);        public void onScrollStopped();        public void onScrolling();    }    private OnScrollListener onScrollListener;    /**     * @param onScrollListener     */    public void setOnScrollListener(OnScrollListener onScrollListener) {        this.onScrollListener = onScrollListener;    }    @Override    protected void onScrollChanged(int x, int y, int oldX, int oldY) {        super.onScrollChanged(x, y, oldX, oldY);        if (onScrollListener != null) {            onScrollListener.onScrollChanged(x, y, oldX, oldY);        }    }    /**     * @param child     * @return     */    public boolean isChildVisible(View child) {        if (child == null) {            return false;        }        Rect scrollBounds = new Rect();        getHitRect(scrollBounds);        return child.getLocalVisibleRect(scrollBounds);    }    /**     * @return     */    public boolean isAtTop() {        return getScrollY() <= 0;    }    /**     * @return     */    public boolean isAtBottom() {        return getChildAt(getChildCount() - 1).getBottom() + getPaddingBottom() == getHeight() + getScrollY();    }}
2.activity_main.xml(布局文件中引用)
        .......
3.MainActivity(调用监听事件)
package android.zhh.com.myapplicationscrollview;import android.app.Activity;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.animation.Animation;import android.view.animation.AnimationUtils;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity {//  初始化自定义的ScrollView    private LazyScrollView myScrollView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        myScrollView = (LazyScrollView)findViewById(R.id.myScrollView);//      自定义的ScrollView的滑动监听事件        myScrollView.setOnScrollListener(new LazyScrollView.OnScrollListener() {            @Override            public void onScrollChanged(int x, int y, int oldX, int oldY) {                Log.e("@", "x:" + oldX + "->" + x + ", y:" + oldY + "->" + y);            }            @Override            public void onScrollStopped() {                if (myScrollView.isAtTop()) {                    Toast.makeText(MainActivity.this, "Stopped at top", Toast.LENGTH_SHORT).show();                } else if (myScrollView.isAtBottom()) {                    Toast.makeText(MainActivity.this, "Stopped at bottom", Toast.LENGTH_SHORT).show();                } else {                    Toast.makeText(MainActivity.this, "Stopped", Toast.LENGTH_SHORT).show();                }            }            @Override            public void onScrolling() {                Log.e("@", "scrolling...");            }        });    }}

 

转载于:https://www.cnblogs.com/zhujiabin/p/7473967.html

你可能感兴趣的文章
第七次作业
查看>>
MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?...
查看>>
我最宏大的个人愿望
查看>>
北漂周记--第5记--拼命编程
查看>>
比赛总结一
查看>>
SpringBoot项目打包
查看>>
JSP的3种方式实现radio ,checkBox,select的默认选择值
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
C++函数基础知识
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
报表服务框架:WEB前端UI
查看>>
5.9UDP客户端服务器-基于OK6410
查看>>
java自学基础、项目实战网站推荐
查看>>
软件包的使用
查看>>
linux中启动与终止lnmp的脚本
查看>>