Android - Реализация перетаскивания между TextViews - PullRequest
2 голосов
/ 24 декабря 2010

Я бы хотел, чтобы пользователь моего приложения Android мог перемещать содержимое одного TextView (A) в другое TextView (B). Они должны быть в состоянии сделать это, перетаскивая из A и отпуская над B. Я пытался добиться этого, используя событие onTouch, особенно ACTION_DOWN и ACTION_UP. Я думал, что это будет прямо вперед, но я столкнулся с несколькими проблемами.

Попытка Один

Сначала я попытался захватить представление, передаваемое каждому вызову обработчику событий. Это хорошо для ACTION_DOWN, поскольку A передается как View. Однако в событии ACTION_UP A также передается как представление, а не как B.

Попытка Два

Я фиксирую необработанные координаты события ACTION_UP (getRawX (), regRawY ()), а затем сравниваю эти координаты с левым, правым, верхним и нижним видами, в которые пользователь может «перетащить». К сожалению, координаты просмотра не связаны с координатами события.

Вопрос

Как реализовать это простое перетаскивание или какую ошибку я совершаю в двух попытках.

Код слушателя (вторая попытка)

OnTouchListener PlayerListener = new OnTouchListener () {
 public boolean onTouch(View v, MotionEvent me) {
  boolean mProcessed = false;
  int mActionX = 0;
  int mActionY = 0;
  int mAction = me.getAction();
  /* Determine gesture */
  switch (mAction) {
      case MotionEvent.ACTION_DOWN:
        mProcessed = theTeams.touchPlayer(v,mAction);
        break;
      case MotionEvent.ACTION_UP:
       mActionX = (int) me.getX();
       mActionY = (int) me.getY();
       mProcessed = theTeams.endTouch(v,mActionX,mActionY);
       break;

Код обработчика (вторая попытка)

  public boolean endTouch(View v, int dropX, int dropY) {
   int mLeft = 0;
   int mRight = 0;
   int mTop = 0;
   int mBottom = 0;
   boolean mFound = false;
   View mView = null;
   /* Find control at that position */
             mView = (TextView) findViewById(R.id.lCourt1ok);
   mLeft = mView.getLeft();
   mRight = mView.getRight();
   mTop = mView.getTop();
   mBottom = mView.getBottom();
   if ((dropX >= mLeft) && (dropX <= mRight ) 
                           && (dropY <= mBottom) && (dropY >= mTop))
    mFound = true;

Постскриптум

Что ж, с попыткой два все в порядке, когда я вычитаю 50 из координаты RawY. Есть предложения почему?

1 Ответ

0 голосов
/ 14 января 2011

Что ж, с попыткой два все выглядит нормально, когда я вычитаю 50 из координаты RawY.Есть предложения почему?

Я предполагаю, что у вас есть строка состояния и строка заголовка.Я думаю, что каждый из них имеет высоту около 25 пикселей, поэтому в обоих случаях элементы на экране будут на 50 пикселей меньше, чем вы ожидаете.

...