Intereting Posts
Предотвращение закрытия некоторых пользователей Android OnBackStackChanged () вызывается дважды, когда новый фрагмент добавляется в backstack Отладка студии Android перестает работать (OSx / Samsung Galaxy S5) Насколько хорошо API NFC для Android поддерживает Mifare Desfire? Разница: андроид: фон и андроид: src? Как получить журналы сбоев Android? При тестировании пользовательского интерфейса Android, как правильно подождать, пока пользовательский интерфейс будет готов? Как определить, когда VideoView начинает играть (Android)? Использование службы Google Play Services LocationClient в фоновом режиме Как взаимодействовать между двумя дочерними фрагментами внутри вложенного фрагмента Показать мягкую клавиатуру при активации панели поиска при помощи SearchView Разница в WebView в Android 4.3 до 4.4 Как использовать Active Android с базой данных в памяти для модульных тестов с использованием Robolectric? Как скрыть значок действия share (который используется больше всего) рядом с поставщиком акций? Как остановить запуск служб?

Запуск анимации по кадрам

У меня есть основной вопрос о запуске кадровой анимации.

Когда я вызываю метод AnimationDrawable.start () из моего кода напрямую, он, похоже, не работает.

public void onCreate(Bundle savedInstanceState) { ... mAnimation.start(); ... } 

Но если я поместил эту строку внутри метода обратного вызова onClick (), нажатие на бутон запускает анимацию.

Почему эта строка не работает в коде?

Благодаря!

Код:

 public class MyAnimation extends Activity { @Override public void onCreate(Bundle savedInstanceState) { AnimationDrawable mframeAnimation = null; super.onCreate(savedInstanceState); setContentView(R.layout.my_animation); ImageView img = (ImageView) findViewById(R.id.imgMain); BitmapDrawable frame1 = (BitmapDrawable) getResources().getDrawable( R.drawable.splash1); BitmapDrawable frame2 = (BitmapDrawable) getResources().getDrawable( R.drawable.splash2); int reasonableDuration = 250; mframeAnimation = new AnimationDrawable(); mframeAnimation.setOneShot(false); mframeAnimation.addFrame(frame1, reasonableDuration); mframeAnimation.addFrame(frame2, reasonableDuration); img.setBackgroundDrawable(mframeAnimation); mframeAnimation.setVisible(true, true); //If this line is inside onClick(...) method of a button, animation works!! mframeAnimation.start(); } 

}

Solutions Collecting From Web of "Запуск анимации по кадрам"

Важно отметить, что метод start (), вызываемый в AnimationDrawable, не может быть вызван во время метода onCreate () вашей Activity, потому что AnimationDrawable еще не полностью привязан к окну. Если вы хотите немедленно воспроизвести анимацию, не требуя взаимодействия, вы можете вызвать ее из метода onWindowFocusChanged () в своей Activity, который вызывается, когда Android переключит ваше окно в фокус. Очень конец страницы http://developer.android.com/guide/topics/graphics/2d-graphics.html

  ImageView img = (ImageView)findViewById(R.id.some layout); AnimationDrawable frameAnimation = (AnimationDrawable)img.getDrawable(); frameAnimation.setCallback(img); frameAnimation.setVisible(true, true); frameAnimation.start(); 

И для добавления анимации вы можете сделать что-то вроде

 <animation-list android:id="@+id/my_animation" android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/frame1" android:duration="150" /> <item android:drawable="@drawable/frame2" android:duration="150" /> </animation-list> 

Используйте Runnable для вставки сообщения start () в очередь сообщений, просто добавьте этот LOC для замены mFrameAnimation.start ();

 img.post(new Starter()); 

Внутренний класс помощника:

 class Starter implements Runnable { public void run() { mFrameAnimation.start(); } } 

Для воспроизведения анимации только в onCreate (…) add:

 ImageView mImageView=(ImageView) findViewById(R.id.image); mImageView.setBackgroundResource(R.anim.film); mFrameAnimation = (AnimationDrawable) mImageView.getBackground(); mImageView.post(new Runnable(){ public void run(){ mFrameAnimation.start(); } });