public class PullableScrollView extends ScrollView implements Pullable {
private GestureDetector mGestureDetector;
/**
* touch事件的拦截函数
*
* @param ev
* @return
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// 根据手势决定是否拦截子控件的onTouch事件
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
/**
* 控件的手势监听
*/
class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// 当纵向滑动的距离大于横向滑动的距离的时候,返回true
if (Math.abs(distanceY) > Math.abs(distanceX)) {
return true;
}
return false;
}
}
public PullableScrollView(Context context) {
super(context);
}
public PullableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
// 初始化手势
mGestureDetector = new GestureDetector(context, new YScrollDetector());
}
public PullableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean canPullDown() {
if (getScrollY() == 0)
return true;
else
return false;
}
@Override
public boolean canPullUp() {
if (getScrollY() >= (getChildAt(0).getHeight() - getMeasuredHeight()))
return true;
else
return false;
}
private GestureDetector mGestureDetector;
/**
* touch事件的拦截函数
*
* @param ev
* @return
*/
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
// 根据手势决定是否拦截子控件的onTouch事件
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
/**
* 控件的手势监听
*/
class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
// 当纵向滑动的距离大于横向滑动的距离的时候,返回true
if (Math.abs(distanceY) > Math.abs(distanceX)) {
return true;
}
return false;
}
}
public PullableScrollView(Context context) {
super(context);
}
public PullableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
// 初始化手势
mGestureDetector = new GestureDetector(context, new YScrollDetector());
}
public PullableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean canPullDown() {
if (getScrollY() == 0)
return true;
else
return false;
}
@Override
public boolean canPullUp() {
if (getScrollY() >= (getChildAt(0).getHeight() - getMeasuredHeight()))
return true;
else
return false;
}
}
或者自定义MyScrollview
- <span style="font-size:18px;">package dianshi.matchtrader.view;
- import android.content.Context;
- import android.util.AttributeSet;
- import android.view.GestureDetector;
- import android.view.MotionEvent;
- import android.widget.ScrollView;
- /**
- * Created by Administrator on 2016/5/20 0020.
- */
- public class MyScrollView extends ScrollView{
- private GestureDetector mGestureDetector;
- public MyScrollView(Context context, AttributeSet attrs) {
- super(context, attrs);
- //初始化手势
- mGestureDetector = new GestureDetector(context, new YScrollDetector());
- }
- /**
- * touch事件的拦截函数
- * @param ev
- * @return
- */
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- //根据手势决定是否拦截子控件的onTouch事件
- return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
- }
- /**
- * 控件的手势监听
- */
- class YScrollDetector extends GestureDetector.SimpleOnGestureListener {
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
- //当纵向滑动的距离大于横向滑动的距离的时候,返回true
- if (Math.abs(distanceY) > Math.abs(distanceX)) {
- return true;
- }
- return false;
- }
- }
- }</span>