我在android.But中创建了一个简单的拖放应用程序现在我想在x轴上移动视图而不触及视图本身。视图应该从用户触摸屏幕的屏幕上的任何位置移动。我怎么能达到这个效果。
目前我正在使用this教程进行拖放操作。我在父视图上应用了OnTouchListner。但我认为这不是一个好主意。请允许任何人建议我这样做的正确方法。< / p>
这是我的代码
rel.setOnTouchListener(this);
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
dX = v.getX() - event.getRawX();
dY = v.getY() - event.getRawY();
lastAction = MotionEvent.ACTION_DOWN;
break;
case MotionEvent.ACTION_MOVE:
v.setY(event.getRawY() + dY);
v.setX(event.getRawX() + dX);
lastAction = MotionEvent.ACTION_MOVE;
break;
case MotionEvent.ACTION_UP:
if (lastAction == MotionEvent.ACTION_DOWN)
Toast.makeText(MainActivity.this, "Clicked!", Toast.LENGTH_SHORT).show();
break;
default:
return false;
}
return true;
}
我的xml代码是
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rel"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/ball"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/ball" />
</RelativeLayout>
答案 0 :(得分:0)
正如我评论的那样,我写的是答案可能对某人有帮助。这段代码只会在X轴上移动视图
.dump
答案 1 :(得分:0)
最后,通过对我的代码进行一些更改来解决此问题。希望这有助于实现此效果的人。
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
dx = v.getX() - event.getRawX();
dy = v.getY() - event.getRawY();
ball_dx = ball.getX();
lastAction = MotionEvent.ACTION_DOWN;
break;
case MotionEvent.ACTION_MOVE:
// ball.setY(event.getRawY() + dy);
if ((event.getRawX() + dx + ball_dx) < screenwidth - 80 && (event.getRawX() + dx + ball_dx) > 10)
ball.setX(event.getRawX() + dx + ball_dx);
lastAction = MotionEvent.ACTION_MOVE;
break;
case MotionEvent.ACTION_UP:
if (lastAction == MotionEvent.ACTION_DOWN)
Toast.makeText(MainActivity.this, "Clicked!", Toast.LENGTH_SHORT).show();
break;
default:
return false;
}
return true;
}