Android 自定义ScrollViewjava
/** * 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); } }