Ejemplo n.º 1
0
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    if (dragging) {
      // doTask = false;
      int action = event.getAction();
      // downHeight = getHeight() - itemHeight;
      switch (action) {
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
          dragging = false;
          if (currentPosView != null) currentPosView.setBackgroundDrawable(null);
          // currentPosView.setBackgroundColor(0x00ffffff);
          stopDrag();
          // Log.d(tag, "stop " + dragCurPos);
          if (dropOutListener != null
                  && (event.getY() < 0 || (event.getY() + getTop()) > getBottom())
              || dragCurPos == DDGridView.INVALID_POSITION) {

            dropOutListener.dropOut(dragItemFrom, (int) event.getX(), (int) event.getY());
          } else if (dropListener != null && dragCurPos < getCount() && dragCurPos >= 0) {
            dropListener.drop(dragItemFrom, dragCurPos);
          }
          break;
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
          int x = (int) event.getX();
          int y = (int) event.getY();

          dragView(x, y);
          int itemnum = pointToPosition(x, y);
          if (itemnum == INVALID_POSITION) {
            dragCurPos = itemnum;
            break;
          }
          if (itemnum != dragCurPos && currentPosView != null) {
            currentPosView.setBackgroundDrawable(null);
            // currentPosView.setBackgroundColor(0x00ffffff);
          }
          currentPosView = getChildAt(itemnum - getFirstVisiblePosition());
          if (currentPosView != null)
            currentPosView.setBackgroundResource(R.drawable.list_drag_background);
          if ((action == MotionEvent.ACTION_DOWN || itemnum != dragCurPos)) {
            if (dragListener != null) {
              dragListener.drag(dragCurPos, itemnum, action == MotionEvent.ACTION_DOWN);
            }
            dragCurPos = itemnum;
          }

          int viewHeight = getHeight() / 6;
          if (y >= viewHeight * 5) {
            if (itemnum == getCount() - 1) {
              doTask = false;
              break;
            }
            downing = true;
            doTask = true;
            sendMessage();

          } else if (y <= viewHeight) {
            if (itemnum == 0) {

              doTask = false;
              break;
            }
            downing = false;
            doTask = true;
            sendMessage();
          } else {
            doTask = false;
            ha.removeMessages(0);
          }

          break;
      }
      return true;
    }
    return super.onTouchEvent(event);
  }