Я все еще в новинку с 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
, но затем приложение просто зависает.
Может ли кто-нибудь указать мне правильное направление?
EDIT:
Я тут и там настраивал код, к сожалению, безрезультатно. Но я заметил шаблон в поведении анимации. Когда я нажимаю на ImageButton
или удерживаю его так, чтобы он перешел от его анимации по умолчанию к ее нажатой или сфокусированной анимации, а затем отодвигаю палец от кнопки, чтобы он не запускал новое действие, он иногда ведет себя очень так же, как я описал в начале этого поста (т. е. он должен вернуться к своей анимации по умолчанию, но вместо этого воспроизводится с удвоенной скоростью, заглушает или вообще не воспроизводит).
В настоящее время xml, содержащий эти ImageButton
s, определяет их background
s как анимацию и не имеет источника (src
). Но когда я изменяю background
на прозрачный, а src
на анимацию, приложение вылетает.
Есть какие-нибудь подсказки?