2012-02-22 6 views
0

지구상에서 Android 앱에서 애니메이션을 시작하고 중지하는 방법을 알아 내려고하고 있습니다.애니메이션 시작 및 중지

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    stopOneButton = (Button) findViewById(R.id.buttonStopOne); 
    stopTwoButton = (Button) findViewById(R.id.buttonStopTwo); 
    stopThreeButton = (Button) findViewById(R.id.buttonStopThree); 
    startButton = (Button) findViewById(R.id.buttonStart); 

    firstImage = (ImageView) findViewById(R.id.imageView1); 

    firstImage.setBackgroundResource(R.drawable.spin_animation); 

    frameAnimation = new AnimationDrawable(); 
    AnimationDrawable frameAnimation = (AnimationDrawable) firstImage.getBackground(); 
// frameAnimation.start(); 

    firstImage.post(new Starter()); 

    stopOneButton.setOnClickListener(this); 
    stopTwoButton.setOnClickListener(this); 
    stopThreeButton.setOnClickListener(this); 
    startButton.setOnClickListener(this); 

} 

class Starter implements Runnable { 

    public void run() { 
     frameAnimation.start(); 
    } 

} 

이 기능에 어떤 버튼을 결합하지 않고 처음부터 시작 거의 내가 가진 모든 것을, 메신저,하지만 이미지가 전혀 주위 회전되지 않습니다.

이 드로어 블 내 XML 파일입니다 버튼에 대한

<?xml version="1.0" encoding="utf-8"?> 
<animation-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false"> 
    <item android:drawable="@drawable/image1" android:duration="500" /> 
    <item android:drawable="@drawable/image2" android:duration="500" /> 
    <item android:drawable="@drawable/image3" android:duration="500" /> 
    <item android:drawable="@drawable/image4" android:duration="500" /> 
</animation-list> 

더 코드 :

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.buttonStopOne: 

     break; 

     case R.id.buttonStopTwo: 
     break; 

     case R.id.buttonStopThree: 
     break; 

     case R.id.buttonStart: 
      frameAnimation.start(); 
     break; 
    } 
} 

사람이 잘못하고 어떤 메신저 확인할 수 있습니까?

답변

0

보기에 애니메이션을 적용해야합니다. 그러므로 firstImage()을 애니메이션으로하려는 애니메이션이라면 firstImage.startAnimation(frameAnimation)으로 전화하십시오. 끝내려면 firstImage.clearAnimation()으로 전화하십시오.

편집 :

좋아. 이제 네가하는 일을 볼 수 있는데, 내가 사용하고있는 Runnable이 절대 호출되지 않는다고 생각한다. 시도 할 수있는 것은 뷰가 완전히 팽창 될 때까지 기다렸다가 애니메이션을 시작하는 것입니다. 이런 식으로 뭔가 :

firstImage = (ImageView) findViewById(R.id.imageView1); 
final AnimationDrawable frameAnimation = (AnimationDrawable) firstImage.getBackground(); 
ViewTreeObserver treeObserver = firstImage.getViewTreeObsver(); 
treeObvserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ 
    @Override 
    public void onGlobalLayout(){ 
     frameAnimation.start(); 
    } 
} 

지금, 나는이 시도하지 않은,하지만보기가 완전히 팽창하고 볼 때 무엇 난 사고가 일어날 것은, 애니메이션이 시작됩니다.

사이드 노트 :;`내 애니메이션을 시작하지 It's also a handy way to figure out when the views have their dimensions.

+0

나는 약간 혼란,'frameAnimation.start()는 않는다는 것을 발견? – JavaCake

+0

애니메이션을 시작하는 또 다른 방법은'View'에서'setAnimation'을 호출하고 애니메이션을 전달한 다음 애니메이션 자체에서'start()'를 호출하는 것입니다. 따라서 귀하의 경우에는 어딘가에 'firstimage.setAnimation (frameAnimation);'이 될 것입니다. 그리고 나서'frameAnimation.start()'라는 애니메이션을 재생하기를 원할 때. 애니메이션이 어떤 뷰를 참조하지 않는다는 것이 거의 확실합니다. – DeeV

+0

현재 코드에서 실수를 지적 할 수 있습니까? – JavaCake