我希望我的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时,尝试二的事情看起来很普遍。有什么建议吗?
答案 0 :(得分:0)
嗯,当我从RawY坐标中减去50时,尝试二的事情看起来很普遍。有什么建议吗?
我猜你有一个状态栏和一个标题栏。我认为每个都高约25像素,所以两者一样,屏幕上的元素将比你期望的要低50个像素。