[英]how to smoothly move a image- view with users finger on android emulator
[英]Android Animation: How to move a view smoothly along with finger and move to its initial position if condition is not satisfied
我想随着手指的移动平稳地移动视图,然后我要检查移动的距离,如果移动的距离小于预期的距离,则必须将视图移动回其初始位置。
我已经搜索了很多东西,并且到达了下面的代码,但是这并没有按预期工作,当我触摸它时会显示两个视图并且随意移动而不是根据我的手指移动。
myView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float dX = 0, dY = 0;
originalX = myView.getX();
originalY = myView.getY();
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
x1 = motionEvent.getX();
break;
case MotionEvent.ACTION_UP:
x2 = motionEvent.getX();
float deltaX = x2 - x1;
if (Math.abs(deltaX) > MIN_DISTANCE) {
myView.animate()
.alpha(0.0f)
.x(motionEvent.getRawX())
.y(motionEvent.getRawY())
.setDuration(500)
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
myView.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
})
.start();
}else {
myView.setX(originalX);
myView.setY(originalY);
}
break;
case MotionEvent.ACTION_MOVE:
myView.setX(motionEvent.getX());
myView.setY(motionEvent.getY());
break;
}
return true;
}
});
请帮助我如何正确解决此问题。
如果仍然遇到问题,请尝试以下代码:
private int _xDelta;
private int _yDelta;
myView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
float dX = 0, dY = 0;
final int X = (int) motionEvent.getRawX();
final int Y = (int) motionEvent.getRawY();
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) view.getLayoutParams();//Replace the RelativeLayout with your myView parent layout
x1 = myView.getX();
_xDelta = X - lParams.leftMargin;
_yDelta = Y - lParams.topMargin;
originalX = myView.getX();
originalY = myView.getY();
break;
case MotionEvent.ACTION_UP:
x2 = myView.getX();
float deltaX = x2 - x1;
if (Math.abs(deltaX) > MIN_DISTANCE) {
myView.animate()
.alpha(0.0f)
.x(motionEvent.getRawX())
.y(motionEvent.getRawY())
.setDuration(500)
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
myView.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
})
.start();
}else {
myView.setX(originalX);
myView.setY(originalY);
}
break;
case MotionEvent.ACTION_MOVE:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();//Replace the RelativeLayout with your myView parent layout
layoutParams.leftMargin = X - _xDelta;
layoutParams.topMargin = Y - _yDelta;
view.setLayoutParams(layoutParams);
break;
}
return true;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.