以下是一个使用view.animate()进行拖动并将视图恢复到原始位置的Android解决方案的代码示例:
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.DecelerateInterpolator;
public class MainActivity extends AppCompatActivity {
private View dragView;
private float dX, dY;
private float originalX, originalY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取需要拖动的视图
dragView = findViewById(R.id.drag_view);
// 设置视图的触摸监听器
dragView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
// 保存原始位置
originalX = view.getX();
originalY = view.getY();
// 计算手指相对于视图的偏移量
dX = view.getX() - motionEvent.getRawX();
dY = view.getY() - motionEvent.getRawY();
break;
case MotionEvent.ACTION_MOVE:
// 移动视图到新的位置
view.animate()
.x(motionEvent.getRawX() + dX)
.y(motionEvent.getRawY() + dY)
.setDuration(0)
.start();
break;
case MotionEvent.ACTION_UP:
// 创建动画,将视图返回到原始位置
ObjectAnimator xAnimator = ObjectAnimator.ofFloat(view, View.X, originalX);
ObjectAnimator yAnimator = ObjectAnimator.ofFloat(view, View.Y, originalY);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.playTogether(xAnimator, yAnimator);
animatorSet.setInterpolator(new DecelerateInterpolator());
animatorSet.setDuration(300);
animatorSet.start();
break;
default:
return false;
}
return true;
}
});
}
}
请注意,此示例假设您的布局文件中有一个id为drag_view
的视图,您可以根据实际情况进行调整。