Android 自定义ScrollView

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


转载于:https://my.oschina.net/u/2320057/blog/638502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值