2010-12-31 10 views
12

Tengo una situación en la que deseo cambiar el diseño de la actividad después de 3 segundos. ¿Puedo hacerlo? Por ejemplo, la aplicación comienza con una pantalla secundaria que se ejecutará durante 3 segundos y luego cambiará automáticamente el diseño al primer diseño de pantalla de la aplicación. Esto debería suceder en la misma actividad, ¿alguna idea?Diseño de cambio de Android dinámicamente

Gracias

Respuesta

14

Lo hice usando solo un diseño xml. Acabo de poner un RelativeLayout adicional que representa mi pantalla de introducción, luego uso una animación fadeOut y luego invoco .setVisibility (View.GONE).

Esto es parte de mi archivo de diseño 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> 

A continuación, dentro de mi actividad tengo esto:

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

Se podría hacer esta carrera después de 3 segundos al poner el startAnimation() , y la setVisibility dentro de un ejecutable y el uso de postDelayed() como se menciona markus. Sin embargo, considere hacer algún trabajo mientras este diseño de introducción está en la pantalla, por lo que no es solo un retraso de 3 segundos para el usuario. Tal vez verifique si la versión actual de la aplicación es la versión actual o no.

EDIT: Usted tendrá que añadir el archivo fadout.xml a /res/anim/ (crear el directorio anim si no existe). Aquí hay un ejemplo.

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"/> 
+0

¡Esta es una solución inteligente! – Sana

+0

¿dónde va el '.anim' en' R.anim'. Obtengo un 'anim no puede ser resuelto o no es un campo' – Alex

+1

@ w0rldart necesitas agregar fadeout.xml a la carpeta'/res/anim/', mira mi edición. – FoamyGuy

2

tal vez usted podría utilizar un postDelayed() - Llamar a ejecutar un ejecutable que se carga un nuevo archivo XML llamando setContentView (R.xml.anotherxml).

3

Simplemente use ViewSwitcher, con esto puede cambiar entre cualquier número de diseños dentro de la aplicación sin tener que hacer ningún setContentView.

1

Esto me deja añadir al post de adnorid, que en sí ViewSwitcher sólo es capaz de cambiar entre 2 layouts/puntos de vista. Esto es simplemente porque está codificado en solo 2 diseños/vistas sin un significado más profundo, hasta donde yo sé. Así que construí mi propio MultipleViewSwitcher aka MVS, base en el ViewSwitcher.java original de la fuente de Android. Los únicos cambios que tuvieron que ser hecha son:

  1. Proporcionar la MVS con propia
    • mFirstTime boolean y
    • int mWhichChild
  2. correcta hardcoded en el manejo dinámico de un número arbitrario de puntos de vista en funciones
    • addView (...)
    • getNextView()
    • reinicio()

Todo esto se puede hacer en MultipleViewSwitcher.java solo y funciona como un encanto.

Me encontré con un montón de cosas como esas donde las fuentes de Android se pueden hacer mucho más poderosas con, muchas veces, casi-sin-breves-ediciones. Me gustaría saber por qué es así, pero eso no es para este hilo aquí.

¡salud!

Cuestiones relacionadas