Подтвердить что ты не робот

Динамическое изменение Android

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

Спасибо

4b9b3361

Ответ 1

Я сделал это, используя только один макет 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"/>

Ответ 2

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

Ответ 3

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

Ответ 4

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

  • Предоставить MVS собственные
    • boolean mFirstTime и
    • int mWhichChild
  • Корректировка жесткого кодирования в динамическую обработку произвольного количества видов в функциях
    • addView (...)
    • getNextView()
    • reset()

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

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

ура!