2012-05-04 3 views
11

번역 애니메이션, 모든 작업 후 이벤트를 클릭에 응답하지 않는,하지만 문제는 애니메이션 후 버튼을 나에게버튼 I 버튼에 번역 애니메이션을 수행 한

Button b=(Button)findViewById(R.id.button1); 
    TranslateAnimation slide=new TranslateAnimation(0, 30, 0,-40); 
    slide.setDuration(500); 
    slide.setZAdjustment(TranslateAnimation.ZORDER_TOP); 
    slide.setFillAfter(true); 

    b.startAnimation(slide); 
을 수정하시기 바랍니다 이벤트를 클릭 응답하지 않습니다
+0

는 것, 당신이 추가하는 것을 잊지로 넣어 발견 버튼에 청취자. – RobinHood

답변

20

낮은 레벨 API (HoneyComb 아래)에서 애니메이션을 처리하는 경우 애니메이션은 실제로 버튼을 이동하지 않고 이미지 만 표시합니다. 클릭하면 레이아웃에 배치 한 동일한 위치에 있습니다.

+1

http://android-developers.blogspot.in/2011/02/animation-in-honeycomb.htaccess Admin Home English Language Content –

+0

: 번역 후 어떻게 내가 버튼을 위치를 변경할 수 있습니다, 현재 나는 애니메이션 수신기를 설정하고 애니메이션 끝 콜백에서 나는 layoutparam을 가지고 그것을 설정했지만 문제가 해결되지 않습니다. – Bytecode

+0

애니메이션이 완료되었습니다 동적으로 새 버튼을 만들어 해당 위치에 추가하고 버튼 가시성을 view.gone으로 변경해야합니다. –

4

애니메이션이 실제로보기 위치를 변경하지 않습니다. setfillAfter (true)를 지정해도 클릭 이벤트를 받아 들일 수있는 위치가 원래 위치입니다.

0

이 사용하려고 :

b.layout(0, -40, b.getWidth(), b.getHeight()); 
21

이 Y 방향으로 객체를 변환합니다 : 당신이 원하는 것을 얻을 수 있지만, 사용자가 수동으로 좌표를 관리해야합니다

ObjectAnimator mover = ObjectAnimator.ofFloat(v, "translationY", 0, 400); 
mover.start(); 
+0

또한 AnimatorSet을 사용하여 x 및 y 방향으로 애니메이션 번역을 결합 할 수 있습니다. –

+1

HoneyComb에서 작동하지 않습니다 – Bytecode

+0

당신은 하루 종일 친구가되었습니다 –

5

. 작동하는지 확인하십시오.

public class AnimationTestActivity extends Activity { 

    private Button mButton; 

    private LinearLayout.LayoutParams params; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mButton = (Button) findViewById(R.id.button); 
     mButton.setOnClickListener(mClickListener); 

     params = (LayoutParams) mButton.getLayoutParams(); 
    } 

    private android.view.View.OnClickListener mClickListener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      TranslateAnimation animation = new TranslateAnimation(0, 0, 0, 400); 
      animation.setDuration(2000); 
      animation.setAnimationListener(mAnimationListener); 
      v.startAnimation(animation); 
     } 
    }; 

    private AnimationListener mAnimationListener = new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      params.topMargin = params.topMargin + 400; 
      mButton.setLayoutParams(params); 
     } 
    }; 
} 
+0

안녕하세요 @ Sushil, 귀하의 솔루션은 실제로 나를 위해, 심지어 애니메이션 표시/숨기기 모두 작동하지만, 볼 수있는 내적 문제는 애니메이션의 끝나는 순간에 화면의 반대편에서 깜박입니다. 새로운 위치에. 너도 이걸 관찰 했니? – mdelolmo

5

나는이 문제에 직면했다. 나는 몇 초 전에 그것을 고쳤다. 그래서 저는 제 해결책을 여러분과 공유해야한다고 생각합니다. android:fillEnabled="true"을 지킬 때

  • 애니메이션 XML 파일에, 나는 android:fillAfter="true"를 제거했습니다.

  • 등록 애니메이션 리스너, 다음 onAnimationEnd() 방법, 내가보기의 위치를 ​​변경할 수 View#Layout()를 호출합니다. 내 경우

   int newLeft = (int) (layoutContent.getLeft() + layoutContent.getWidth() * 0.8); 
       layoutContent.layout(newLeft, 
            layoutContent.getTop(), 
            newLeft + layoutContent.getMeasuredWidth(), 
            layoutContent.getTop() + layoutContent.getMeasuredHeight()); 
는 애니메이션이 무엇 폭의 80 %를 레프트 사이드 위해 layoutContent 슬라이드 것입니다.

잘 작동합니다. 희망이 도움이됩니다.

@ 업데이트 : 오늘은 android 3.0 +에서 ObjectAnimator을 사용할 수 있습니다. 3.0 이하에서 android 용으로 개발할 경우 support library v.4에서 찾을 수 있습니다. ObjectAnimator은 애니메이션 용 베스터입니다.

@ 업데이트 # 2 : ViewPropertyAnimator를 Android API 상위 버전 12에서 사용할 수 있습니다. 더 나은 성능을 제공하고 클릭 이벤트의 문제를 해결합니다. 예 :

mButton.animate() 
       .setDuration(TIME) 
       .translationY(VALUE) 
       .start(); 
+1

ObjectAnimator가 지원 라이브러리에 없습니다! – amiekuser

+0

+1 도움말 : "애니메이션 xml 파일에서 android : fillAfter ="true "android : fillEnabled ="true "를 삭제했습니다." – Mazino

0

나는 쉬운 솔루션이 레이아웃의 버튼 최종 위치를 정의하고 어떤 위치에서 애니메이션을 시작, 즉 지정 fromX 또는 fromY을 대신 제로

+0

대답이 수락되지 않는다는 뜻입니까? 당신은 당신 자신의 대답도 받아 들일 수 있습니다. – Talha

관련 문제