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