啥也不说了额,直接上代码,老铁门自己看!


import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.GestureDetector;import android.view.MotionEvent;import android.view.View;import android.view.ViewConfiguration;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.HorizontalScrollView;public class MyHorizontalScrollView extends HorizontalScrollView {    private boolean mCanScroll = false;    private float downX;    private int mParentWidth = 720;    int slopDistance;    private GestureDetector mGesture;    public MyHorizontalScrollView(Context context) {        super(context);        initView();    }    public MyHorizontalScrollView(Context context, AttributeSet attrs) {        super(context, attrs);        initView();    }    public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initView();    }    boolean isScroll = false;    public void setScroll(boolean isScroll) {        this.isScroll = isScroll;    }    public synchronized void initView() {        slopDistance = ViewConfiguration.get(getContext()).getScaledTouchSlop();        mGesture = new GestureDetector(getContext(), mOnGesture);    }    float mDownX, mDownY, mLastX, mLastY;    public void setmParentWidth(Context context) {        WindowManager wm = (WindowManager) context                .getSystemService(Context.WINDOW_SERVICE);        mParentWidth = wm.getDefaultDisplay().getWidth();    }    @Override    public boolean onInterceptTouchEvent(MotionEvent event) {        Log.d("Intercep: ", "ListView");        switch (event.getAction()) {            case MotionEvent.ACTION_DOWN:                mDownX = (int) event.getX();                break;            case MotionEvent.ACTION_MOVE:                mLastX = (int) event.getX();                if (Math.abs(mLastX - mDownX) > slopDistance) {                    getParent().requestDisallowInterceptTouchEvent(true);                    return true;                }                break;            case MotionEvent.ACTION_UP:                break;        }        getParent().requestDisallowInterceptTouchEvent(false);        return false;    }    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {//        boolean handled = super.dispatchTouchEvent(ev);//        handled |= mGesture.onTouchEvent(ev);        boolean handled = mGesture.onTouchEvent(ev);        return handled ? true : super.dispatchTouchEvent(ev);    }    private GestureDetector.OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {        @Override        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {            if (Math.abs(distanceX) > Math.abs(distanceY)) {                int scrollx = getScrollX();                if ((scrollx == 0 && e1.getX() - e2.getX() <= -10)                        || (getChildAt(0).getMeasuredWidth() <= (scrollx + mParentWidth) && e1.getX()                        - e2.getX() >= 10)) {                    return true;                }                return false;            }            return true;        }        @Override        public boolean onSingleTapConfirmed(MotionEvent e) {            if (getChildCount() == 0) return false;            ViewGroup child = (ViewGroup) getChildAt(0);            for (int i = 0; i < child.getChildCount(); i++) {                View subChild = child.getChildAt(i);                if (ViewUtils.isEventWithinView(e, subChild)) {                    if (onItemClickListener != null) {                        onItemClickListener.onItemClick(e, subChild, i, subChild.getId());                    }                    break;                }            }            return true;        }    };    public OnScrollViewItemClickListener onItemClickListener;    public void setOnItemClickListener(OnScrollViewItemClickListener onItemClickListener) {        this.onItemClickListener = onItemClickListener;    }    public interface OnScrollViewItemClickListener {        void onItemClick(MotionEvent ev, View view, int position, long id);    }}
public static boolean isEventWithinView(MotionEvent e, View child) {    Rect viewRect = new Rect();    int[] childPosition = new int[2];    child.getLocationOnScreen(childPosition);    int left = childPosition[0];    int right = left + child.getWidth();    int top = childPosition[1];    int bottom = top + child.getHeight();    viewRect.set(left, top, right, bottom);    return viewRect.contains((int) e.getRawX(), (int) e.getRawY());}
 


更多相关文章

  1. Android 代码实现重启
  2. 【Arcgis android】 离线编辑实现及一些代码段
  3. Android 实现扫雷小游戏实例代码
  4. android代码分析,及Terminal使用
  5. Android应用程序绑定服务(bindService)的过程源代码分析(2)
  6. [导入]Android代码优化
  7. android APP隐私政策弹框的实现代码实例
  8. android手机打电话代码分析
  9. 如何编写高效的android代码(1)

随机推荐

  1. [Linux] 总结各系统 双网卡绑定
  2. 请问同一软件为什么linux版的要比xp版的
  3. busybox1.19.3编译错误解决办法
  4. linux用户管理及用户权力下放
  5. 如何在windows 10的linux子系统中启动jup
  6. linux环境下,配置eclipse nodejs开发环境
  7. [置顶] Linux 内核学习(1)
  8. linux下crontab 任务不执行的可能原因总
  9. 第四组内部linux比赛命题
  10. 有种生活态度叫 Linux