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);
}
}
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);
}
}