Jouer Gif dans WebView ou Affichage Personnalisé

En un mot, j'ai une Activité qui s'applique setContentView(R.id.layout_a), et aura une durée de 5 secondes.

J'ai essayé de définir un Affichage personnalisé de la classe et à l'aide de Film de la classe à charger le gif, puis fixez la vue personnalisée pour layout_a mais il affiche juste vide.

La WebView méthode

J'ai essayé de WebView, il peut afficher le gif bien, mais le gif peut animer seulement la première fois que j'ai lancer cette activité. Il va juste afficher la dernière image quand, plus tard, l'activité est lancée.

J'ai essayé WebView.reload() mais pas sucré.

Voici mon code lorsque vous tentez d'appliquer la WebView:

public class activityA extends Activity {

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    setContentView(R.layout.activity_a);

    WebView splashFrame = (WebView)findViewById(R.id.splashFrame);

    splashFrame.setBackgroundColor(Color.TRANSPARENT);
    splashFrame.loadDataWithBaseURL("file:///android_res/drawable/", "<img align='middle' src='face_morph_gif.gif' width='100%' />", "text/html", "utf-8", null);
    splashFrame.reload();

    Handler handler = new Handler();

    //run a thread after 3 seconds to start the home screen
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {

            //make sure we close the splash screen so the user won't come back when it presses back key

            finish();
            //start the home screen

            Intent intent = new Intent(activityA.this, activityB.class);
            SplashScreenActivity.this.startActivity(intent);
        }

    }, 5000); 

  }      
}

Donc, voici mon Question 1: Comment faire de ce gif jouer depuis le début, lorsque je lance Une activité? J'ai remarqué que quand j'ai ouvert ce gif à l'aide de Safari/Chrome, il va jouer juste une fois, jusqu'à ce que je actualiser manuellement le navigateur.

La Vue Personnalisée méthode

C'est la première voie que je cherchais, mais je ne trouvais pas de travail, même une fois.

De l'activité d'Un code:

public class activityA extends Activity {

@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);

    setContentView(R.layout.activity_a);
    Handler handler = new Handler();

    //run a thread after 3 seconds to start the home screen
    handler.postDelayed(new Runnable() {

        @Override
        public void run() {

            //make sure we close the splash screen so the user won't come back when it presses back key

            finish();
            //start the home screen

            Intent intent = new Intent(activityA.this, activityB.class);
            SplashScreenActivity.this.startActivity(intent);
        }

    }, 5000); 

  }      
}

Le Custome Vue:

public class GifView extends View {
public Movie mMovie;
public long mMovieStart;
public GifView(Context context) {
super(context);
setFocusable(true);
InputStream is = context.getResources().openRawResource(R.drawable.face_morph_gif);
mMovie = Movie.decodeStream(is);
}
public GifView(Context context, AttributeSet attr) {
super(context, attr);
setFocusable(true);
InputStream is = context.getResources().openRawResource(R.drawable.face_morph_gif);
mMovie = Movie.decodeStream(is);
}
public GifView(Context context, AttributeSet attr, int defStyle) {
super(context, attr, defStyle);
setFocusable(true);
InputStream is = context.getResources().openRawResource(R.drawable.face_morph_gif);
mMovie = Movie.decodeStream(is);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//      canvas.drawColor(Color.TRANSPARENT);
final long now = SystemClock.uptimeMillis();
if (mMovieStart == 0) {
mMovieStart = now;
}
if (mMovie != null) {
int dur = mMovie.duration();
//        Log.d("gif Canvas", "duration: " + mMovie.duration());
if (dur == 0) {
dur = 4000;
}
int relTime = (int)((now - mMovieStart) % dur);
mMovie.setTime(relTime);
mMovie.draw(canvas, 10, 10);
//        Log.d("gif Canvas", mMovie.width() + "x" + mMovie.height());
invalidate();
}
}
@Override
protected void onMeasure(final int widthMeasureSpec,
final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight());
}
}

Et le xml de layout_a

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/app_background"
tools:ignore="ContentDescription" >
<ImageView
... />
<ImageView
... />
<ImageView
... />
<ImageView
... />
<com.xxx.GifView 
android:id="@+id/splashFrame"
android:layout_width="95dp" 
android:layout_height="156dp" 
android:visibility="visible" />

Donc, voici mon Question 2: Pourquoi cette vue personnalisée ne peut pas afficher le gif? J'ai mis des points de rupture dans onDraw méthode et je suis sûr que le mMovie pouvez charger le gif (mMovie pouvez retourner correcte de la largeur et de la hauteur du gif)

Je sais obtenir le gif de travail sur Android est un très vieux sujet, autant que je sache, il existe 3 façons:

  1. Film Classe

  2. Vue Personnalisée

  3. Split GIF/Utiliser Android Animation

Je ne peux pas utiliser la troisième voie, parce que le gif que j'utilise a 100 images, et il n'est pas bon marché.

J'ai passer par tous les tutoriels et AINSI de questions, mais aucun d'eux ne peut faire ce travail.

Je vous remercie pour la lecture de mes questions.

Vous êtes à la recherche de quelque chose comme un wellcome écran pour votre application?
Exactement. Mais je veux juste afficher ce gif comme ImageView, pas en plein écran. Comme vous pouvez le voir dans le fichier xml, il existe plusieurs autres ImageViews
pourquoi ne pas utiliser le film de classe pour la lecture de votre gif?
J'ai essayé d'utiliser dans ma Vue Personnalisée, mais pas de chance. C'est ce que tu veux dire?
Désolé, après la lecture de certains sujets, si vous êtes en utilisant ce sur android 2.2 ou version ultérieure, vous pouvez utiliser un simple webview. Voir: droid-blog.net/2011/10/17/...

OriginalL'auteur dumbfingers | 2012-10-11