2014-01-08 1 views
0
안드로이드

에, 회전 및 TranslateAnimation을 만들어 화면의 아무 곳이나 터치하면 그 다음 작업을 수행합니다나는 안드로이드 응용 프로그램을 만들려고 해요

  1. 새로운 이미지 뷰가 화면의 중앙에 표시한다을 (적어도이 예에서는 이미지보기의 그림이 화살표임을 나타냅니다.);
  2. 화면에 닿은 방향을 가리키는 화살표가 있습니다.
  3. 화살표는 화면 가운데에서 화면을 터치 한 위치로 애니메이션을 사용하여 변환해야합니다. 나는 안드로이드에 좀 새로 온 사람 때문에

내가 정확히 무엇을 할 수있는 가장 좋은 방법은 모르는, 그래서 다음, 작동하지 않는, 해결책을했다 :

happyrelativelayout.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() ==MotionEvent.ACTION_DOWN){ 
       ImageView arrow = new ImageView(ctx); 
       arrow.setImageResource(R.drawable.arrow); 
       arrow.setX(centerx); 
       arrow.setY(centery); 
       float angle = -(float) Math.toDegrees(Math.atan2(centerx - event.getX(), centery - event.getY())); 
       arrow.setRotation(angle); 
       happyrelativelayout.addView(arrow); 
       arrowanimation = new TranslateAnimation(0, event.getX() - centerx, 0, event.getY() - centery); 
       arrowanimation.setFillAfter(true); 
       arrowanimation.setDuration(1000); 
       arrow.startanimation(arrowanimation); 
      } 
     } 
} 

으로 이 솔루션은 모든 것이 애니메이션을 제외하고 어떻게 움직여야 할 것 같아 보입니다. 화살표가 터치 된 지점으로 이동하더라도 애니메이션이 없으며 화살표가 가운데에서 터치 된 지점으로 깜박입니다. 나는 중요한 것을 놓친거야? 나는 이전 버전을 지원하기 위해 NineOldAndroids을 사용하려는 때문에 일반적이며,

답변

2

코드가 될 바로 보이는,하지만 난 TranslateAnimation()

가 개인적으로 나는 ObjectAnimator 클래스를 사용하여 사용 적이 없다.

ObjectAnimator를 사용하는 방법입니다.

final ObjectAnimator translateX = ObjectAnimator.ofFloat(arrow, "translationX", centerX, event.getX()); 
translateX.setDuration(1000); 

final ObjectAnimator translateY = ObjectAnimator.ofFloat(arrow, "translationY", centerY, event.getY()); 
translateY.setDuration(1000); 

final AnimatorSet moveAnimation = new AnimatorSet(); 
moveAnimation.playTogether(translateX, translateY); 
moveAnimation.start(); 
+0

와우! 완벽하게 작동했습니다! 고맙습니다! – user3170923

+0

문제 없습니다. 도움이되기를 기뻐합니다. –