Android 自定义ScrollView
/**
* Created by SRain on 2016/3/16.
*/
import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;
/**
* 自定义MyScrollView 如果初始化判断用户为左右滑动,则阻止scrollView响应 如
* 果判断初始化为上下滑动,则阻止水平响应
*/
public class MyScrollView extends ScrollView {
private String tag = this.getClass().getSimpleName();
public MyScrollView(Context context) {
super(context);
}
public MyScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
private boolean isOk = false;
private boolean sonUserFlag = false; // 默认为垂直
private float mDownPosX = 0;
private float mDownPosY = 0;
public boolean onInterceptTouchEvent(MotionEvent ev) {
final float x = ev.getX();
final float y = ev.getY();
final int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN: // 按下,初始化mDownPosX,mDownPosY
mDownPosX = x;
mDownPosY = y;
isOk = false;
Log.i(tag, "屏幕按下");
break;
case MotionEvent.ACTION_MOVE:
// 移动 。如果横向 大于纵向,则认为此次移动为横向,交给子处理
// 否则自己处理。
final float deltaX = Math.abs(x - mDownPosX);
final float deltaY = Math.abs(y - mDownPosY);
Log.e(tag, "横向移动距离deltaX :" + deltaX);
Log.e(tag, "纵向移动距离deltaY :" + deltaY);
mDownPosY = y;
/* if (isOk) {
if (sonUserFlag) {
Log.i(tag, "============已经确定方向:水平");
return false;
} else {
Log.i(tag, "============已经确定方向:垂直");
}
} else {*/
if (deltaX > deltaY) // 确定了为横向
{
isOk = true;
sonUserFlag = true;
Log.e(tag, "-----横向移动-------");
return false;
} else if (deltaY > deltaX && deltaY > 50) {
isOk = true;
Log.e(tag, "》》》》》竖向移动 《《《《《");
} else {
Log.e(tag, "未确定方向");
}
// }
}
return super.onInterceptTouchEvent(ev);
}
}