Object Property Animators를 사용하면 기본적으로 변경하려는 속성이 "N"인 모든 X 밀리 초마다 "setN()"메소드를 반복적으로 호출하는 수학 함수입니다.
알파의 경우 제공된 예제에서 애니메이트하는 뷰를 다시 그리려면 invalidate()
을 호출해야합니다. 차이점은 이라고 View
개체에서 호출하면 invalidate()
이 호출됩니다. 드로어 블을 그리는 데 사용되는 Paint
개체로 대상 객체를 설정하려면 View
에서 invalidate()
을 호출해야합니다. 그러면 새 Paint
매개 변수로 다시 그려집니다.
대상을 가능한 한 가장 높은 수준의 자식으로 설정하는 것이 이상적입니다. 다시 그리기는 애니메이션하려는보기에서만 발생합니다. 예를 들어 대상을 루트보기로 설정하면 전체 ViewGroup의 모든 하위에 invalidate()
이 호출되고 ViewGroup의 모든 하위에 draw()
이 차례로 호출됩니다. 최상위 레벨 ImageView
으로 설정하면 ImageView
만 다시 그려집니다.
하드웨어를 최대한 활용하려면 레이어 속성을 사용해야합니다. 먼저 애니메이션을 적용 할 상위 뷰를 결정해야합니다. Drawable
만 사라지게하려면 Drawable
또는 View
을 포함하게됩니다. 모든 것을 사라지게하려는 경우 루트보기가됩니다. 애니메이션으로 결정한 내용은 전체적으로 View
에 즉시 적용됩니다.
Animator를 시작하기 바로 전에 부모보기에서 setLayerType()
을 사용하십시오. View#LAYER_TYPE_HARDWARE
으로 설정하십시오. 그런 다음 AnimationListener
을 설정하고 애니메이터 완료시 LayerType을 View#LAYER_TYPE_SOFTWARE
또는 View#LAYER_TYPE_NONE
으로 재설정하십시오.당신이 translateX
속성을 사용하여 myParentView
을 번역한다면
myParentView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
myObjectAnimator.addListener(new ViewAnimator.AnimatorListener() {
public void onAnimationEnd(Animator animation) {
myParentView.setLayerType(View.LAYER_TYPE_NONE);
}
public void onAnimationRepeat(Animator animation) {
}
public void onAnimationStart(Animator animation) {
}
public void onAnimationCancel(Animator animation) {
myParentView.setLayerType(View.LAYER_TYPE_NONE, null);
}
}
myObjectAnimator.start();
이 경우, 그것은 하나 개의 평면에 레이어
myParentView
모든 그것의 아이들을 넣어 것입니다. 그것을 하드웨어 메모리에 넣으십시오. 한 번에 전체보기를 번역하십시오. 그런 다음 완료되면 메모리에서
myParentView
을 제거하십시오.
는
편집 :
마지막으로 참고, 알파는 CPU에 혼란을 낸다. 하프 - 알파 (half-alpha)에 대해 뭔가를 가지고 뷰를 가로 질러 번역하면, 단순히 뷰를 번역하는 것보다 렌더링하는 것이 더 어려울 것입니다. 아껴서 사용하십시오.
음, 문제가되고 있기 때문에 이것을 묻는 것 같습니다. 애니메이션은 모든 것을 무효로 만들지 만, 우리가 가지고있는 뷰 계층 구조를 보여 주면 해결 방법을 찾을 수 있습니다. 당신이 그 안에 움직이는 것을 지정하십시오. –
아니, 아직 아무 것도 쓰지 않았다. 내가하기 전에 모든 정보를 얻으려고했다. :) – cottonBallPaws
음, 애니메이션이 평균적인 장치에서 잘 작동한다면, 우리는 괜찮습니다. 그러나 하드웨어 가속과 같은 일반적인 향상 (항상 사용할 수있는 것은 아님) 이후에도 눈에 띄게 무겁다면 자신 만의 솔루션을 찾아야합니다. 예를 들어, 전체 계층 구조를 무효로 만드는 배경에 애니메이션을 적용하는 경우 계층 구조의 스냅 샷을 만들고 그 뒤에 배경을 애니메이션으로 만듭니다. 어쨌든 하드웨어 가속 및 대부분의 장치에서 작동하기 때문에 노력을 기울일 지 여부는 기본적으로 결정됩니다. (잘하면 :) –