0

손가락의 움직임과 함께보기를 부드럽게 움직이고 싶다면 이동 한 거리를 확인하고 싶습니다. 거리가 예상 거리보다 적다면 뷰를 초기 위치로 다시 이동해야합니다.Android 애니메이션 : 조건이 만족스럽지 않으면 손가락으로보기를 부드럽게 움직이고 초기 위치로 이동하는 방법

나는 많은 코드를 검색했지만 예상대로 작동하지 않습니다.이를 만질 때 두 개의보기가 나타나고 내 손가락 움직임에 따라 우연히 움직입니다.

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; 
} 
    }); 

어떻게 해결할 수 있습니까?

답변

0

여전히 문제에 직면하는 경우 다음 코드 시도 :

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; 
     } 
    });