2015-02-07 3 views
4

내가 다음 코드 (스칼라에서 안드로이드 프로젝트)이 있습니다 animator가 제대로 뒤쪽으로 작업 시작 후 실행되는 동안 화면을 터치하면ValueAnimator를 재사용 할 수 있습니까?

val animator = new ValueAnimator 
animator.setFloatValues(0f, 100f) 
animator.setDuration(20000L) 
animator.addUpdateListener(this) // prints current value to console 
animator.start 

override def onTouch(v: View, event: MotionEvent) = { 
    animator.setFloatValues(100f, 0f) 
    animator.setCurrentPlayTime(0) 

    if (!animator.isRunning) animator.start 
    true 
} 

(나는 값을 교환 한 이후부터). 그러나 화면이 끝난 후 아무 것도 나타나지 않으면 다시 시작하지 않습니다.

질문이 애니메이터를 어떻게 든 재사용하고 중지 된 후 주어진 값에 대해 다시 작동시킬 수 있습니까?

+1

아니 당신은 할 수 없습니다. 방금 체크 했어. 나는 또한 그것을 나의 응용에서 재사용하고 싶었다. 따라서 복제를 사용하여 새 인스턴스를 얻은 다음 대상 뷰를 각각에 설정하십시오. – Napolean

답변

0

애니메이션을 다시 사용할 수 없습니다.

당신은 리셋() 필요 다시 같은 객체를 사용하기 전에 초기화() 메소드를 호출하여 애니메이션 오브젝트를 초기화. 이는 새로운 애니메이션 객체를 인스턴스화하는 것과 유사합니다.

+0

ValueAnimator는 Animator가 아니고 Animator입니다. –

2

다음과 같은 방법으로 애니메이션을 다시 사용할 수 있습니다 : 당신은 또한 시작 float로서 새로운 애니메이션 마지막 애니메이션에서 마지막 값을 대신 animator.end()animator.cancel()를 사용하여 전달할 수 있습니다

... 
animator.end(); 
animator.setFloatValues(...); 
animator.start(); 
... 

. 예를 들어 마지막 애니메이션 값이 50 인 경우 animator.setFloatValues(50, 0f)을 호출하여 애니메이션이 연결된 것처럼 보일 수 있습니다.

허용 된 답변 상태를 고려하면 불가능합니다. 사용자가 두 손가락으로 탭을 만들 때 설명 된 방법이 Touch Circle 앱에 사용되었습니다. 객체가 조금 떠는 때 BTW, 그것은 아주 좋은 효과 - 당신이 원하는대로 그것을 사용, 코드 exerpt 아래입니다 :

void shapeTremble(long delay) { 
    if (null == animatorTremble) { 
     ValueAnimator animator = new ValueAnimator(); 
     animator.setDuration(850).setInterpolator(new AccelerateDecelerateInterpolator()); 
     animator.addUpdateListener(new AnimatorUpdateListener() { 
      @Override 
      public void onAnimationUpdate(ValueAnimator valueAnimator) { 
       setCircleScale((Float) valueAnimator.getAnimatedValue(), true); 
      } 
     }); 
     animatorTremble = animator; 
    } else { 
     animatorTremble.cancel(); 
    } 
    animatorTremble.setFloatValues(circleScale, 0.85f, 1.05f, 0.95f, 1.025f, 1.0f); 
    animatorTremble.setStartDelay(delay); 
    animatorTremble.start(); 
} 
관련 문제