在 Android 中實(shí)現(xiàn)拖放操作的撤銷與恢復(fù),可以通過以下幾個(gè)步驟來完成:
創(chuàng)建一個(gè)自定義 View,例如 MyDraggableView,并在其中實(shí)現(xiàn)拖動(dòng)功能。
為 MyDraggableView 添加一個(gè)變量,用于存儲(chǔ)上一次的位置信息,例如 private PointF lastPosition;
。
在 MyDraggableView 的構(gòu)造函數(shù)中初始化 lastPosition。
public MyDraggableView(Context context, AttributeSet attrs) {
super(context, attrs);
lastPosition = new PointF(0, 0);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 記錄按下時(shí)的位置
lastPosition.set(getX(), getY());
break;
case MotionEvent.ACTION_MOVE:
// 計(jì)算移動(dòng)的距離
float dx = event.getX() - getWidth() / 2;
float dy = event.getY() - getHeight() / 2;
// 更新 View 的位置
setX(getX() + dx);
setY(getY() + dy);
break;
case MotionEvent.ACTION_UP:
// 手指抬起時(shí),將當(dāng)前位置設(shè)置為 lastPosition
lastPosition.set(getX(), getY());
break;
}
return true;
}
Button undoButton = findViewById(R.id.undo_button);
undoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 將 MyDraggableView 的位置恢復(fù)到上一次的位置
myDraggableView.setX(myDraggableView.lastPosition.x);
myDraggableView.setY(myDraggableView.lastPosition.y);
}
});
這樣,你就實(shí)現(xiàn)了在 Android 中拖放操作的撤銷與恢復(fù)功能。當(dāng)用戶點(diǎn)擊撤銷按鈕時(shí),MyDraggableView 會(huì)回到上一次的位置。