Java 安卓益智游戏中点击图片拖动
我已经尝试了StackOverflow中建议的所有可能的方法 但我无法从单击更改为拖动 OnTouch事件用于单击。。我的图片在这里被点击。我无法拖放图像。我需要拖动图像而不是单击 我将非常感谢你。如果你在这方面帮助我 我也尝试过这个场景的 但我没有得到任何结果。所以请任何人都能帮助我 有人能帮我吗??Java 安卓益智游戏中点击图片拖动,java,android,onclick,drag-and-drop,Java,Android,Onclick,Drag And Drop,我已经尝试了StackOverflow中建议的所有可能的方法 但我无法从单击更改为拖动 OnTouch事件用于单击。。我的图片在这里被点击。我无法拖放图像。我需要拖动图像而不是单击 我将非常感谢你。如果你在这方面帮助我 我也尝试过这个场景的 但我没有得到任何结果。所以请任何人都能帮助我 有人能帮我吗?? public class TouchListener implements View.OnTouchListener { private float xDelta; privat
public class TouchListener implements View.OnTouchListener {
private float xDelta;
private float yDelta;
private PuzzleActivity activity;
public TouchListener(PuzzleActivity activity) {
this.activity = activity;
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float x = motionEvent.getRawX();
float y = motionEvent.getRawY();
final double tolerance = sqrt(pow(view.getWidth(), 2) + pow(view.getHeight(), 2)) / 10;
PuzzlePiece piece = (PuzzlePiece) view;
if (!piece.canMove) {
return true;
}
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
xDelta = x - lParams.leftMargin;
yDelta = y - lParams.topMargin;
piece.bringToFront();
break;
case MotionEvent.ACTION_MOVE:
lParams.leftMargin = (int) (x - xDelta);
lParams.topMargin = (int) (y - yDelta);
view.setLayoutParams(lParams);
break;
case MotionEvent.ACTION_UP:
int xDiff = abs(piece.xCoord - lParams.leftMargin);
int yDiff = abs(piece.yCoord - lParams.topMargin);
if (xDiff <= tolerance && yDiff <= tolerance) {
lParams.leftMargin = piece.xCoord;
lParams.topMargin = piece.yCoord;
piece.setLayoutParams(lParams);
piece.canMove = false;
sendViewToBack(piece);
activity.checkGameOver();
}
break;
}
return true;
}
public void sendViewToBack(final View child) {
final ViewGroup parent = (ViewGroup)child.getParent();
if (null != parent) {
parent.removeView(child);
parent.addView(child, 0);
}
}
}
公共类TouchListener实现View.OnTouchListener{
私人浮动xDelta;
私人浮标;
私人活动;
公共TouchListener(拼图活动){
这个。活动=活动;
}
@凌驾
公共布尔onTouch(视图、运动事件、运动事件){
float x=motionEvent.getRawX();
float y=motionEvent.getRawY();
最终双公差=sqrt(pow(view.getWidth(),2)+pow(view.getHeight(),2))/10;
拼图块=(拼图块)视图;
如果(!件.可移动){
返回true;
}
RelativeLayout.LayoutParams lParams=(RelativeLayout.LayoutParams)视图。getLayoutParams();
开关(motionEvent.getAction()&motionEvent.ACTION\u掩码){
case MotionEvent.ACTION\u DOWN:
xDelta=x-lParams.leftMargin;
yDelta=y-lParams.topMargin;
片。布林托夫隆();
打破
case MotionEvent.ACTION\u移动:
lParams.leftMargin=(int)(x-xDelta);
lParams.topMargin=(int)(y-yDelta);
view.setLayoutParams(LPARAM);
打破
case MotionEvent.ACTION\u UP:
int xDiff=abs(piece.xCoord-lParams.leftMargin);
int yDiff=abs(件号yCoord-lParams.topMargin);
如果(XD)如果您可以检查其他事项,如处理拖放而不是此情况,我可以使用拖放而不是单击吗?使用上述代码?