Android 监听ScrollView时候滚动到了底部

package com.zy.tour.util.ui;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.LinearLayout;
import android.widget.ScrollView;

/**
 * @类名:BottomScrollView
 * @功能描述: 监听ScrollView时候滚动到底部
 * @作者:XuanKe'Huang
 * @时间:2014-10-10 下午3:17:56
 * @Copyright 2014
 */

public class BottomScrollView extends ScrollView {

	private OnScrollToBottomListener onScrollToBottom;

	public BottomScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public BottomScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public BottomScrollView(Context context) {
		super(context);
	}

	/**
	 * 方法名: setOnScrollToBottomLintener
	 * 
	 * 功能描述:设置监听
	 * 
	 * @param listener
	 * @param layout
	 *            ScrollView包含的Layout
	 * @return void
	 * 
	 *         throws
	 */
	public void setOnScrollToBottomLintener(OnScrollToBottomListener listener,
			LinearLayout layout) {
		this.layout = layout;
		onScrollToBottom = listener;
	}

	public interface OnScrollToBottomListener {
		// 当前滑动的距离
		public void onScrollBottomListener(int top);

		// 手指离开了屏幕
		public void FingerUpLinstener(boolean moveDistance);
	}

	private LinearLayout layout;
	private int startY = 0;// 开始点
	private int moveDistance = 0;// 移动的距离

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		switch (ev.getAction()) {
		case MotionEvent.ACTION_DOWN:// 手指按下
			startY = (int) ev.getRawY();
			break;
		case MotionEvent.ACTION_MOVE:// 手指移动
			moveDistance = (int) (startY - ev.getRawY());
			if (this.getScrollY() + this.getHeight() >= layout.getHeight()
					&& moveDistance > 50) {
				onScrollToBottom.onScrollBottomListener(moveDistance);
			}
			break;
		case MotionEvent.ACTION_UP:// 手指离开
			if (this.getScrollY() + this.getHeight() >= layout.getHeight()) {
				if (moveDistance > 100) {
					onScrollToBottom.FingerUpLinstener(true);
				} else {
					onScrollToBottom.FingerUpLinstener(false);
				}
			}
			startY = 0;
			break;
		default:
			break;
		}
		return super.dispatchTouchEvent(ev);
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值