我希望我的Android应用程序的用户能够将一个TextView(A)的内容移动到另一个TextView(B)。他们应该能够通过从A拖动并在B上释放来做到这一点。我已经尝试使用onTouch事件(尤其是ACTION_DOWN和ACTION_UP)来实现这一点。我以为这会很简单,但是我遇到了一些问题。
尝试一次
我首先尝试捕获传递给事件处理程序的每个调用的View。这适合ACTION_DOWN,因为A作为视图传入。但是,在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;
后记
好吧,当我从RawY坐标中减去50时,尝试两次似乎就可以了。有什么建议吗?
最佳答案
好吧,当我从RawY坐标中减去50时,尝试两次似乎就可以了。有什么建议吗?
我猜您有一个状态栏和一个标题栏。我认为每个像素的高度约为25像素,因此,同时使用这两个元素时,屏幕上的元素将比您期望的像素低50 px。