Android - 在TextViews之间实现拖放

时间:2010-12-23 21:58:02

标签: android drag-and-drop coordinates ontouchevent

我希望我的Android应用程序的用户能够将一个TextView(A)的内容移动到另一个TextView(B)。他们应该能够通过从A拖动并释放B来实现这一点。我试图使用onTouch事件来实现这一点,特别是ACTION_DOWN和ACTION_UP。我认为这是直截了当的,但我遇到了一些问题。

尝试一个

我首先尝试捕获传递给每个事件处理程序调用的View。这对ACTION_DOWN很好,因为A作为View传入。但是,在ACTION_UP事件中,A也作为View而不是B传递。

尝试两次

我捕获了ACTION_UP事件的原始坐标(getRawX(),regRawY()),然后将这些坐标与Left,Right,Top&用户可以“放弃”的视图的底部。不幸的是,View坐标似乎与事件坐标无关。

问题

如何实现这种简单的拖放或我在两次尝试中犯的错误。

侦听器代码(尝试两次)

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;

后记

嗯,当我从RawY坐标中减去50时,尝试二的事情看起来很普遍。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

  

嗯,当我从RawY坐标中减去50时,尝试二的事情看起来很普遍。有什么建议吗?

我猜你有一个状态栏和一个标题栏。我认为每个都高约25像素,所以两者一样,屏幕上的元素将比你期望的要低50个像素。