onTouchEvent中 ACTION_MOVE不响应的问题

只要最后全部返回return true 就可以了。


private int point1;
    private int point2;
    private int startX;
    private int startY;
@Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub
        int action = event.getAction();


        int x = (int) event.getRawX();
        int y = (int) event.getRawY();


        Log.i("", "x=" + x + " y=" + y);


        switch (action) {
        // 鼠标按下 拖拉动作开始
        case MotionEvent.ACTION_DOWN:
        Log.i("touch", "ACTION_DOWN");
            point1 = getTop();


            startX = (int) event.getX();
            startY = y - getTop();


            Log.i("", "startX=" + startX + " startY=" + startY);
            
            break;


        // 鼠标移动 拖拉动作进行中
        case MotionEvent.ACTION_MOVE:
            int temp_x = x - startX;
            int temp_y = y - startY;
            Log.i("touch", "ACTION_MOVE");
            Log.i("", temp_x+" , "+temp_y);
//               v.layout(x - startX, y - startY, x + v.getWidth() - startX, y - startY + v.getHeight());
            scrollBy(-temp_x, -temp_y);
//               v.bringToFront();
//               v.postInvalidate();


            break;
        // 鼠标释放 拖拉动作结束
        case MotionEvent.ACTION_UP:
        Log.i("touch", "ACTION_UP");
            break;
        }
        return true;
    }


如果return false的话 只能检测到ACTION_DOWN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
我不知道具体情况,但是重写 RecyclerView onTouchEvent 通常是为了实现一些特殊的触摸行为,比如滑动删除、拖拽排序等。以下是可能的一些代码实现: 1. 滑动删除 ``` @Override public boolean onTouchEvent(MotionEvent e) { switch (e.getAction()) { case MotionEvent.ACTION_DOWN: mIsSwiping = false; mDownX = e.getX(); mDownY = e.getY(); return super.onTouchEvent(e); case MotionEvent.ACTION_MOVE: float dx = e.getX() - mDownX; float dy = e.getY() - mDownY; if (Math.abs(dx) > mTouchSlop && Math.abs(dy) < mTouchSlop) { mIsSwiping = true; int position = getChildAdapterPosition(findChildViewUnder(e.getX(), e.getY())); if (position != RecyclerView.NO_POSITION) { mSwipePosition = position; } } return super.onTouchEvent(e); case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (mIsSwiping) { if (dx > 0) { // swiped right, perform delete action mAdapter.deleteItem(mSwipePosition); } else { // swiped left, reset item view mAdapter.notifyItemChanged(mSwipePosition); } mIsSwiping = false; mSwipePosition = RecyclerView.NO_POSITION; return true; } return super.onTouchEvent(e); } return super.onTouchEvent(e); } ``` 2. 拖拽排序 ``` @Override public boolean onTouchEvent(MotionEvent e) { switch (e.getAction()) { case MotionEvent.ACTION_DOWN: mDragPosition = getChildAdapterPosition(findChildViewUnder(e.getX(), e.getY())); if (mDragPosition != RecyclerView.NO_POSITION) { mDraggedViewHolder = getChildViewHolder(findChildViewUnder(e.getX(), e.getY())); mDragStartX = mDraggedViewHolder.itemView.getX(); mDragStartY = mDraggedViewHolder.itemView.getY(); mDragStartTouchX = e.getX(); mDragStartTouchY = e.getY(); if (mItemTouchHelper != null) { mItemTouchHelper.startDrag(mDraggedViewHolder); } } return super.onTouchEvent(e); case MotionEvent.ACTION_MOVE: return mDraggedViewHolder != null && mItemTouchHelper != null && mItemTouchHelper.onTouchEvent(e); case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (mDraggedViewHolder != null) { mDraggedViewHolder.itemView.animate().x(mDragStartX).y(mDragStartY).setDuration(150).start(); mDraggedViewHolder = null; mDragPosition = RecyclerView.NO_POSITION; return true; } return super.onTouchEvent(e); } return super.onTouchEvent(e); } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值