Android 自定義ScrollView

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);
    }
}
相關文章
相關標籤/搜索