为什么我的动画在返回包含它的活动时会冻结?

时间:2012-02-01 23:23:47

标签: android animation android-activity imagebutton freeze

我仍然是Android的新手,所以如果这是一个明显的错误,请原谅我。在此活动中,我使用ViewPager水平滚动包含ImageButton的三个布局,这些布局具有动画背景,具体取决于其当前状态。按下按钮时,它会启动一个新活动。但是,当我按下后退按钮返回包含新活动动画的活动时,有时动画会冻结或播放得比应该更快。我写了一个方法来启动我在onWindowFocusChanged()onRestart()中使用的动画。我在Android 2.1(API 7)中工作。

这是我的代码:

public class CopyOfWorld extends Activity{

    MediaPlayer muzak;
    Boolean mSwitch = false;
    ImageButton holmes;
    AnimationDrawable holmesAnimation;

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.world);

        Preferencer pp = (Preferencer)getApplicationContext();

        ViewPagerAdapter adapter = new ViewPagerAdapter();
        ViewPager myPager = (ViewPager) findViewById(R.id.viewpager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(1);


        if(pp.getMuzak()){
            mSwitch = true;
            muzak = MediaPlayer.create(CopyOfWorld.this, R.raw.level1);
            muzak.setLooping(true);
            muzak.start();
        }
    }

    public void clicker(View v){
     Intent myIntent = new Intent(CopyOfWorld.this , Subworld.class);
        startActivityForResult(myIntent, 0);
   }

    @Override
    public void onWindowFocusChanged(boolean hasFocus){
        super.onWindowFocusChanged(hasFocus);
        beginRender();

    }

    @Override
    protected void onPause(){
        super.onPause();
        if(mSwitch){
        muzak.release();
        }
    }

    @Override
    protected void onRestart(){
        super.onRestart();
        Preferencer pp = (Preferencer)getApplicationContext();
        if(pp.getMuzak()){
            muzak = MediaPlayer.create(CopyOfWorld.this, R.raw.level1);
            muzak.setLooping(true);
            muzak.start();
        }
        beginRender();
    }


    public void beginRender(){
        ImageButton holmes = (ImageButton) findViewById(R.id.subworlder);
        StateListDrawable background = (StateListDrawable) holmes.getBackground();
        Drawable current = background.getCurrent();
        if(current instanceof AnimationDrawable){
            holmesAnimation = (AnimationDrawable) current;
            holmesAnimation.start();
        }
    }
}

我已尝试在beginRender()下调用方法()onResume,但该应用只会崩溃。

有人能指出我正确的方向吗?

编辑:

我一直在调整这里和那里的代码,遗憾的是无济于事。但我确实注意到动画行为的模式。当我按下ImageButton或按住它以使其从默认动画转到按下或聚焦的动画时,然后将手指从按钮移开,这样它就不会启动新活动,有时候表现得非常像我在本文开头所描述的那样(即它应该返回到它的默认动画,但是以两倍的速率播放,窒息或根本不播放。)

目前,包含这些ImageButton的xml将其background定义为动画,并且没有来源(src)。但是,当我将background更改为透明并将src更改为动画时,应用程序崩溃。

任何线索?

0 个答案:

没有答案