2017-05-14 6 views
0

휴지통 목록이있는 아티스트가 있습니다. 아티스트는 즐겨 찾기로 표시하거나 즐겨 찾기로 표시 할 수 없습니다.Android - '종료'상태에서 시작하는 전환 드로어가 처음 그려지면 깜박임

이 상태를 표현할 마음이 있습니다. 나는 그 주제의 아티스트가 좋아하는 것으로 표시되어있는 경우, 윤곽선이 그려진 마음에서 채워진 마음으로 갈 수있는 전환 가능 드로어 블을 가지고 있습니다. 애니메이션 자체가 올바르게 작동하고 사용자가 마음을 클릭하면 아름답게 보입니다. 항목에 대한 온 클릭에

 TransitionDrawable td = new TransitionDrawable(new Drawable[]{ 
       ContextCompat.getDrawable(getActivity(), R.drawable.favorite_border), 
       ContextCompat.getDrawable(getActivity(), R.drawable.favorite)}); 

     artistViewHolder.image.setImageDrawable(td); 

     if (artist.isFavorite()) { 
      td.startTransition(0); 
     } 

는, 나도 .reverseTransition (300) 또는 .startTransition (300) 다음의 상태에 따라 호출합니다.

보기가 생성되고 (첫 번째 화면로드) 언제든지 문제가 발생하여 2 번째 위치 (즐겨 찾기)부터 시작해야합니다. 초기 애니메이션은 애니메이션 타임이 0으로 설정되어 있어도 빈 하트에서 채워진 하트까지 깜박입니다. 이는 목록이 더 작은 아티스트 세트로 필터링되는 경우와 같이 무효화 될 때마다 발생합니다.

일을하고 실제로 드로어 블을 설정하는 것이 아니기 때문에 0은 실제로 "즉시"가 아닙니다. 내가 "끝"위치에서 시작하는 다른 방법을 찾을 수 없습니다, 전환 드로어 블 자체에서 이미지의 시작 위치를 반대로하는 것 이외.

그래도 시작/되돌리기가 심장 기반으로 다르게 동작 할 것입니다. 기껏해야, 전이 드로어 블을 확장하고 시작/역방향/재설정 메소드를 오버라이드하여 어느 초기 상태에 있는지를 고려해야하며 해커처럼 보일 것입니다.

나는 깜박임을 유발하지는 않지만 끝 위치에서 시작하는 것이 확실하지 않습니까?

감사합니다.

답변

0

더 좋은 방법이없는 한 초기 상태를 기반으로 시작/역 호출을 뒤집어서 확장했습니다.

public class MyTransitionDrawable extends TransitionDrawable{ 

private boolean initialFavorite = false; 

public MyTransitionDrawable(Drawable[] layers) { 
    super(layers); 
} 

public MyTransitionDrawable(Drawable[] layers, boolean initialFavorite) { 
    super(layers); 
    this.initialFavorite = initialFavorite; 
} 

public boolean isInitialFavorite() { 
    return initialFavorite; 
} 

@Override 
public void startTransition(int durationMillis) { 
    if(!initialFavorite){ 
     super.startTransition(durationMillis); 
    }else{ 
     super.reverseTransition(durationMillis); 
    } 
} 

@Override 
public void reverseTransition(int durationMillis) { 
    if(!initialFavorite){ 
     super.reverseTransition(durationMillis); 
    }else{ 
     super.startTransition(durationMillis); 
    } 
} 
} 

`

1

당신은 td.startTransition에 깜박임을 제거 migtht하지 않는다 (0); 그래서 Drawables 배열에서 변경 순서가 필요합니다. 당신은 내가하고 결국 무슨 짓을했는지 onBindViewHolder

+0

에서이 작업을 수행하지만, 완전히 작동하는 내 대답을 요구하는이 제공 작동

Drawable favorite_border = ContextCompat.getDrawable(getActivity(), R.drawable.favorite_border); Drawable favorite = ContextCompat.getDrawable(getActivity(), R.drawable.favorite); TransitionDrawable td = new TransitionDrawable(isFavorite ? new Drawable[]{favorite, favorite_border} : new Drawable[]{favorite_border, favorite}); artistViewHolder.image.setImageDrawable(td); 

예를 들어 는 시작부터/당신이 경계를 고려한다면 이성을 상실하게 리버스 꺼짐과 즐겨 찾기 완료. – Ben987654