DevBytes: ListView Animations

CHET HAASE : 안녕하세요, Android 팀 팀의 Chet Haase입니다 Google, 그래픽 및 애니메이션 작업 그리고 오늘 저는 ListView에 대해 조금 더 이야기하고 싶습니다

이전 에피소드에서 내가 이야기했던 애니메이션 이것은 제가 전화하기를 좋아하는 시리즈의 또 다른 에피소드입니다 당신은 잘못하고있다 따라서 이것은 마지막 항목과 관련된 또 다른 항목입니다 보기가 어떻게되는지 이해할 필요가 있습니다

실제로 ListView에서 사용됩니다 ListView는 뷰를 재활용합니다 즉, 해당 뷰 화면 상에 있지 않다면, 그보기를 사용하여 다른 콘텐츠 그리고 당신은 그 사실을 알고 있어야합니다 특히 당신이 애니메이션을 실행하면 안된다

잘못된 것을 움직이는 것 그래서 그것을 증명하기 위해 약간의 데모를 봅시다 그래서 우리는이 ListView Animation 데모를 가지고 있습니다 그리고 긴 목록이 있습니다 치즈 중 하나 지루한

이제이 항목을 클릭하면 자동으로 페이드 아웃 한 다음 어댑터에서 제거되었습니다 그리고 ListView 자체가 업데이트 될 것입니다 그리고 그 치즈 더 이상 존재하지 않습니다 그래서 우리는 어딘가로 스크롤 할 수 있습니다 우리는 이것을 삭제할 수 있습니다

우리는 페이드 아웃을 볼 수 있습니다 그런 다음 ListView가 축소됩니다 그래서 모든 것이 좋습니다 그러나 이들 중 몇 개를 삭제 한 다음에는 어떻게됩니까? 목록 던지기? 다행히도 화면에서이를 볼 수 있습니다 하지만 내가 볼 수 있어야하는 것은, 목록과 관련이없는 항목이있는 것 같습니다

내가 클릭 한 것들이 제거되고 있습니다 그리고 이것은 우리가 페이드 애니메이션을 그 이후로 재활용되어 사용되는 다른 콘텐츠 이제, 그것이 잘못된 것을 의미하지는 않습니다 항목을 삭제하는 중입니다 그러나 잘못된 시각이 생기고 있음을 의미합니다

그러면 항목을 클릭하면됩니다 그것에 페이드 애니메이션을 실행하기 시작합니다 우리는 목록을 던져 그 시각은 화면에서 벗어난 것입니다 그것은 다른 내용을 위해 재사용된다

뷰는 계속 페이드를 나타냅니다 그것은 같은 경우입니다 그것은 내부의 같은 대상입니다 그래도 지금은 변색이 계속됩니다 다른 내용을 보여줍니다

애니메이션이 끝나면 자동으로 원래 항목을 삭제하십시오 따라서 데이터는 손상되지 않습니다 괜찮아 그러나 화면의 시각적 경험은 이상합니다 우리는 그런 것들을하고 싶지 않습니다

그래서 이것을 설명 할 수있는 몇 가지 방법이 있습니다 그리고 저는 오늘 그 사람들에 대해 이야기하고 싶습니다 그래서 한 가지는 뷰라는이 항목을 사용할 수 있습니다 속성 애니메이터 그리고 Jelly Bean의 경우 – 사실,이 두 가지 방법 모두 이것에 대한 보상은 젤리 빈 릴리스에 있습니다

하나는 내부적으로 View Property Animator를 사용하는 것입니다 시스템, 이봐 요, 난 아직이 견해와 함께 끝나지 않았다 그러니 제 애니메이션을 안심시키고 실행하십시오 그래서 내가 애니메이션을 위해 그것을 사용한다면, 나는 fling 조작을하면 더 이상 없다는 것을 알 수 있습니다 화면에 장애가 발생했습니다

새로운 관점에서 우리가 빠져 나가는 것은 아무것도 없습니다 우리가 견해를 고수하고 있기 때문에 화면을 보는 것 애니메이션이 실행 중이었습니다 그래서, 기본적으로, 우리는 그것을 잡고 말하고 있습니다, 당신은 무엇을 압니까? 나는이 견해를 잠근다 내가 그것을 사용하는 중이기 때문에 아직 그것을 재활용하지 마십시오

View Property Animator를 사용하고 싶지 않다면, 다른 방법으로 다시 Jelly Bean에서 같은 기능을 얻으려면 이 새 속성을 사용하는 것이 릴리스입니다 과도 상태라고합니다 그래서이 메소드를 호출하면됩니다 일시적인 상태가 있습니다 그리고 그것은 당신이 그것을 사용하는 중간에 있다는 것을 말해줍니다

당신이 우리에게 말할 때까지 그것을 재활용하지 않을 것입니다 다시 한번, 우리는 몇 가지를 삭제합니다 우리는 목록을 던져 그리고 우리는 화면에서 아무런 혼란스러운 경험을하지 않습니다 우리는 당신이 여전히 그러한 견해를 사용하고 있다는 것을 알고 있기 때문에 너는 사라져 가고있어

흥미로운 데모와 재미있는 코드 저것을 보자 그래서이 클래스는 ListView Animations입니다 우리는 확인란과 목록보기 및 어댑터를 만들고, 그 모든 것들 흥미로운 부분이 여기 있습니다

항목을 클릭하면 어떻게됩니까? 그래서 우리가 그것을 클릭하면, 우리는 즉시 이 애니메이션을 실행할 것입니다 하지만 우리가 실행하는 방법은이 체크 박스 중 어느 것이 상단에서 속성 애니메이터보기 사용을 확인하거나 일시적 상태 또는 그 중 아무 것도 아닙니다 그래서이 사건들 중 어느 것도, 기본적으로 우리는 여기에 코드 우리는 Object Animator를 만들려고합니다 그리고 우리는 움직일 것입니다

이전 에피소드에서 우리는 사용 방법에 대한 몇 가지 기본 사항을 보았습니다 객체 애니메이터 우리는 목표물을 사용합니다 우리는 target 속성을 사용합니다 우리는 그 뷰에서 알파 속성을 애니메이트 할 것입니다

그리고 우리는 값을 0에서 0으로 애니메이트 할 것입니다 지금 당장은 하나입니다 완전히 불투명합니다 보통 그렇습니다 그래서 우리는 애니메이션을 만듭니다

우리는 기간을 1,000으로 설정했습니다 이 작업을하기에는 너무 길지만 이 데모의 목적은 실제로 당신이 애니메이션과 인공물이 보일 때 그것을 봅니다 일시적인 상태는 확인되지 않습니다 여기서는이 코드를 건너 뛰겠습니다 재미있는 부분은 나중에 살펴 보겠습니다

우리는 청자를 추가하여 실제로 나중에 다시 복원 한 다음 제거하십시오 데이터 집합에서 그래서 애니메이션 끝나면,이 좋은 작은 페이드 애니메이션 0으로 끝나면 여기로 들어가 실제로 치즈 목록에서 제거하십시오 데이터 세트 변경 알림, 알파 속성 복원, 항상 페이딩 애니메이션과 관련하여 중요합니다 그리고 우리는 끝났어

그런 다음 애니메이션을 시작합니다 그래서 그 견해가 화면 밖으로 스크롤되지 않으면 인생은 좋습니다 애니메이션이 시작된 후 화면에 당신이 얻을 때보기가 다른 콘텐츠로 재 할당되었습니다 우리가 전에 보았던 혼란스러운 경험 따라서 두 가지 해결 방법은 속성 애니메이터보기

따라서이 데모 맨 위에서 해당 상자를 확인한 경우 Object Animator를 사용하여 해당 뷰에 애니메이션을 적용하는 대신, 우리는 View Property Animator를 사용할 것입니다 그리고 우리는 이것을 이와 비슷한 코드로 호출합니다 우리는 viewanimate라고 말합니다 그러면 뷰 속성 애니메이터 인스턴스가 그 특정한 견해

기간 설정, 다시 말하지만, 이 애니메이션은이 데모 목적으로 만 사용됩니다 그런 다음 알파를 값에 애니메이션을 적용 할 것입니다 이 값은 현재 값에서 0이됩니다 그리고이 애니메이션이 끝나면 눈에 띄게 유사한 작업을하는 종료 동작 우리가 전에 보았던 것 치즈 목록에서 항목을 삭제하고 알림을 보냅니다

데이터 세트가 변경되고 alpha 속성이 복원됩니다 그리고 우리는 끝났어 이 문제를 해결할 특별한 마법은 없습니다 내부적으로, 우리는 옳은 일을 말하고 있습니다 ListView, 아직이 뷰를 재활용하지 마십시오

그것을 사용하는 중간 그리고 그 애니메이션이 끝나면 그 깃발을 놓습니다 그 견해는 적절하게 재활용 될 수 있습니다 View 속성을 사용하지 않는 경우 대체 방법 Animator,이 똑같은 기능에 액세스 할 수 있습니다 set을 호출하여 기능에 일시적인 상태가 있습니다

따라서 데모 맨 위에있는 다른 상자를 확인한 경우 그런 과도 상태라고 말하면, 우리는 말할 것이다 과도 상태 따라서 항목을 클릭하면 자동으로 ListView의 해당 항목을 전환 상태로 플래그 지정하고, 즉, ListView는 해당 아이템을 재활용하지 않을 때까지 괜찮다고 말해 그래서 우리는 일시적인 상태로 설정하려고합니다 이전과 똑같은 애니메이션을 실행하려고합니다

그러나 OnAnimation이 끝나면이 작은 추가 기능이 실행됩니다 일시적인 상태를 그 상태로 복원하는 코드 비트 기본 상태는 false입니다 그래서 항목을 클릭하십시오 우리는 Object Animator를 실행하기 시작합니다 보기로 페이드 아웃됩니다

모두 행복합니다 거기에 일시적인 상태를 설정했습니다 우리는 목록을 던져 그 견해는 여전히 존재합니다 이제 화면이 꺼져서 볼 수 없지만 더 이상 다른 콘텐츠에 사용되지 않습니다

이 애니메이션을 만드는 열쇠입니다 실제로 올바르게 작동합니다 그래서 ListView Animations를 제대로하고 싶다면, 그 일시적인 상태를 알고 있습니다 그리고 재활용 될 내용을 애니메이션으로 만들지 마라 다른 콘텐츠와

감사