2012-10-17 5 views
0

현재 TranslateAnimation을 사용하여 버튼의 위치를 ​​애니메이션하려고합니다. 여러 장소에서 실제 버튼 이동뿐만 아니라 드로어 블을 만드는 방법은 애니메이션 후에 레이아웃을 변경하는 것입니다. 나는 그 일을했지만 두 가지 문제/해결책이있다.버튼 번역 및 지속시키기

  1. setFillAfter (true)를 추가한다. drawable은 애니메이션 이후에도 지속되지만 레이아웃이 변경되면 drawable은 변환 거리만큼 오프셋되고 버튼의 빈 프레임은 이제 있어야합니다.

  2. setFillAfter (false)를 추가하십시오. 이 작업을 수행 한 다음 애니메이션이 제대로 작동 한 후에 레이아웃을 설정하지만 아이콘이 깜박이면 애니메이션 종료와 새 레이아웃 매개 변수가있는 화면 새로 고침 사이의 지연이라고 가정합니다. 현재이 코드를 사용하고 있지만 플래시가 용납 될 수 없으므로 해결 방법을 찾고 싶습니다.

다음은 현재 내 코드입니다 : 나는 내 자신의 질문에 대한 해결책을 알아 냈어요

final View aniView = v; // v is some view 
TranslateAnimation ani = new TranslateAnimation(0, 
240 - v.getLeft() - v.getWidth()/2, 
0, 
240 - v.getTop() - v.getHeight()/2); 


ani.setDuration(500); 

ani.setFillAfter(false); 
ani.setAnimationListener(new AnimationListener() { 
public void onAnimationEnd(Animation a) { 
     aniView.setTag(new Boolean(true)); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(aniView.getWidth(), 
    aniView.getHeight()); 
    params.leftMargin = 240 - aniView.getWidth()/2; 
    params.topMargin = 240 - aniView.getHeight()/2; 

    aniView.setLayoutParams(params); 
} 
public void onAnimationStart(Animation a) {} 
public void onAnimationRepeat(Animation a) {} 
}); 
v.animationStart(ani); 

답변

3

과 같은 문제에 걸쳐 오는 사람의 코드를 게시 할 예정입니다. 기본적으로 아이디어는 손 전에 레이아웃 매개 변수를 설정하고 본질적으로 애니메이션을 뒤집는 것입니다. 여기에 아이디어 : 피트의 멋진 대답을 완료

TranslateAnimation ani = new TranslateAnimation(v.getLeft() + v.getWidth()/2 - 240 , 
       0, 
       v.getTop() + v.getHeight()/2 - 240, 
       0); 


     ani.setDuration(500); 
     ani.setFillAfter(true); 
     ani.setDuration(1000); 
     ani.setFillAfter(true); 
     ani.setAnimationListener(new AnimationListener() { 
      public void onAnimationEnd(Animation a) { 
       aniView.setTag(new Boolean(true)); 
      } 
      public void onAnimationStart(Animation a) {} 
      public void onAnimationRepeat(Animation a) {} 
     }); 

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(v.getWidth(), 
       v.getHeight()); 
     params.leftMargin = 240 - aniView.getWidth()/2; 
     params.topMargin = 240 - aniView.getHeight()/2; 

     v.setLayoutParams(params); 
     v.startAnimation(set); 
0

, 나는 전체 활동 레이아웃을합니다 (애니메이션의 끝에서 깜박) 애니메이션을하려고 같은 문제가 있었다, 그러나 나는 view.translateX 대신 레이아웃을 사용 Params ... 그리고이 솔루션은 제 경우에도 적용됩니다.