我仍然是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
更改为动画时,应用程序崩溃。
任何线索?