Динамически меняет макет

У меня есть ситуация, когда я хочу изменить макет активности через 3 секунды. Хо, я могу это сделать? Например, приложение запускается с заставкой, которая будет работать в течение 3 секунд, а затем автоматически переключит макет на первый экран приложения. Это должно произойти в той же деятельности, каких-либо идей?

благодаря

Я сделал это, используя только один xml-макет. Я просто добавляю в него дополнительный RelativeLayout, который представляет мой вступительный экран, а затем я использую анимацию fadeOut, а затем вызываю .setVisibility (View.GONE).

Это часть моего файла макета main.xml

<RelativeLayout android:id="@+id/introLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" > <ImageView android:id="@+id/logoImg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/logo"> </ImageView> </RelativeLayout> 

Тогда в моей деятельности у меня есть это:

 introLayout = (RelativeLayout) findViewById(R.id.introLayout); Animation fadeOutAnim = AnimationUtils.loadAnimation(MyActivity.this, R.anim.fadeout); introLayout.startAnimation(fadeOutAnim); introLayout.setVisibility(View.GONE); 

Вы можете сделать этот запуск через 3 секунды, поставив startAnimation () и setVisibility внутри runnable и используя postDelayed () в качестве упомянутого маркуса. Подумайте о том, чтобы сделать какую-то работу, хотя этот вводный макет находится на экране, хотя, так что это не просто 3-секундная задержка для пользователя. Возможно, проверьте, является ли текущая версия приложения текущей версией или нет.

EDIT: вам нужно добавить файл fadout.xml в /res/anim/ (создать каталог анимации, если он не существует). Вот пример.

fadeout.xml

 <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="700" android:fillAfter="true"/> 

Просто используйте ViewSwitcher, используя это, можно переключаться между любым количеством макетов в приложении без необходимости делать setContentView.

Возможно, вы могли бы использовать postDelayed () – вызов для выполнения runnable, который загрузит новый XML-файл, вызвав setContentView (R.xml.anotherxml).

Это оставляет меня добавить к сообщению аднорида, что сам ViewSwitcher может переключаться между двумя макетами / представлениями. Это просто потому, что он жестко закодирован только 2 макетами / представлениями без более глубокого значения, насколько я знаю. Поэтому я создал свой собственный MultipleViewSwitcher aka MVS, основанный на исходном ViewSwitcher.java из источника android. Единственные изменения, которые должны были быть сделаны:

  1. Предоставьте MVS собственные
    • Boolean mFirstTime и
    • Int mWhichChild
  2. Исправлено жесткое кодирование в динамическую обработку произвольного количества видов в функциях
    • addView (…)
    • getNextView ()
    • сброс()

Все это можно сделать только в MultipleViewSwitcher.java и работает как шарм.

Я столкнулся с множеством таких вещей, где источники андроида могли быть сделаны намного более мощными, много раз, почти без изменений. Я хотел бы знать, почему это так, но это не для этой темы.

ура!