2012-11-29 2 views
1

저는 지난 몇 시간 동안 애니메이션에서 몇 개의 드롭 된 프레임을 수정하려고했습니다. 애니메이션을 처음 실행하면 ~ 5 프레임 (동일한보기의 후속 애니메이션은 매우 매끄럽습니다). 나는 애니메이션을 사용하는 동안 하드웨어 레이어를 사용하려고 시도했지만 작동하지 않았다 (애니메이션에는 차이가 없음). 소프트웨어 레이어를 사용하면 프레임이 떨어지는 문제를 해결할 수 있습니다.애니메이션보기를 사용하는 동안 하드웨어 레이어 사용

그러나 소프트웨어 레이어를 사용하면 애니메이션이 하드웨어 레이어를 사용하는 것만 큼 부드럽지 않고 레이어가없는 느낌 (과학적 테스트는없고 내 머리 속에있을 수도 있음)을 얻습니다. 첫 번째 것은 물론 뒤쳐져있다.)

그래서이 문제를 어떻게 해결할 수 있을지 궁금합니다. 처음으로 소프트웨어 레이어를 사용하여 애니메이션을 렌더링하고 이후 애니메이션에서 레이어를 사용하지 못하게 할 수 있지만 그럴 수는 없습니다.

final View v = .....; 

    v.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
    v.buildLayer(); 

    ValueAnimator anim = ValueAnimator.ofFloat(0, 180); 
    anim.setInterpolator(new AccelerateDecelerateInterpolator()); 
    anim.setDuration(250); 
    anim.addUpdateListener(new AnimatorUpdateListener() { 

     @Override 
     public void onAnimationUpdate(ValueAnimator animation) { 
      Float animatedValue = (Float) animation.getAnimatedValue(); 
      v.setRotation(animatedValue); 
     } 
    }); 
    anim.addListener(new AnimatorListenerAdapter() { 

     @Override 
     public void onAnimationEnd(Animator animation) { 
      v.setLayerType(View.LAYER_TYPE_NONE, null); 
     } 
    }); 
    anim.start(); 
+0

몇 가지 추가 정보 뷰 가시성이 View.INVISIBLE 인 경우 레이어를 생성합니다. 대신 v.setAlpha (0)을 사용하면 애니메이션에서 지연이 더 이상 발생하지 않습니다. –

답변

0

실제로 애니메이션의 대폭 향상한다 smootheness HARDWARE 층으로 설정 : 여기

제가

사용하는 코드이다. 에뮬레이터에서 응용 프로그램을 테스트하는 경우 가상 장치 설정에서 "호스트 GPU 사용"을 선택하여 하드웨어 가속의 이점을 얻으십시오.

관련 문제