2017-03-23 1 views
2

Je souhaite créer un écran de démarrage animé à l'aide de l'image gif. J'ai utilisé la bibliothèque Glide car elle supporte les images gif.Création d'un splash animé à l'aide de la bibliothèque GIF et Glide

Je l'ai fait les choses suivantes pour y parvenir:

  1. splash.xml Créé avec un imageview en elle.

    <ImageView 
        android:id="@+id/iv_gif_view" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"/> 
    

  2. intérieur SplashActivity.java


     @Override 
     protected void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_splash); 

      ImageView ivImage = (ImageView) findViewById(R.id.iv_gif_view); 
      Glide.with(this).load(R.drawable.splash_xxhdpi_2) 
        .asGif().into(ivImage); 
     }

Mais quand je lance l'écran de l'application va rien noire apparaît à l'écran. J'utilise Glide compile 'com.github.bumptech.glide:glide:3.6.1'

Répondre

0

Android ne supporte pas GIF afin d'éviter de l'utiliser, car il consomme de la mémoire. Glide est une belle bibliothèque de mise en cache d'images et heureusement, elle supporte les images gif. Je partage un moyen alternatif et efficace pour obtenir un écran d'accueil animé.

  1. Créez splash.xml comme d'habitude avec une vue d'image.
  2. Sortez chaque image de votre image gif. J'ai utilisé splash_hdpi_1, splash_hdpi_2, splash_hdpi_3 par exemple.
  3. créer splash_gif_animation.xml dans drawable avec le code ci-dessous
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false" > 
    <item 
     android:drawable="@drawable/splash_hdpi_1" 
     android:duration="150"/> 
    <item 
     android:drawable="@drawable/splash_hdpi_2" 
     android:duration="150"/> 
    <item 
     android:drawable="@drawable/splash_hdpi_3" 
     android:duration="150"/> 
</animation-list> 
  1. Dans votre SplashActivity.java mettre ci-dessous le code
ImageView ivImage = (ImageView) findViewById(R.id.your_image_view); 
ivImage.setBackgroundResource(R.drawable.splash_gif_animation); 

AnimationDrawable splashAnimation = (AnimationDrawable) ivImage.getBackground(); 
splashAnimation.start();
  1. Vous avez terminé :)
+0

Looks optimiser et assez simple selon les directives android. –

0

Essayez ceci:

ImageView ivImage= (ImageView) findViewById(R.id.iv_gif_view); 
GlideDrawableImageViewTarget imageViewTarget = new GlideDrawableImageViewTarget(ivImage); 
Glide.with(this) 
    .load(R.drawable.splash_xxhdpi_2) 
    .into(imageViewTarget); 
+0

va charger l'image comme il gif? –

+0

Il devrait le charger comme un gif –

+0

ok merci Saurabh –

2

Vous pouvez essayer cette façon

public class GifImageView extends View { 

    private InputStream mInputStream; 
    private Movie mMovie; 
    private int mWidth, mHeight; 
    private long mStart; 
    private Context mContext; 

    public GifImageView(Context context) { 
     super(context); 
     this.mContext = context; 
    } 

    public GifImageView(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public GifImageView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     this.mContext = context; 
     if (attrs.getAttributeName(1).equals("background")) { 
      int id = Integer.parseInt(attrs.getAttributeValue(1).substring(1)); 
      setGifImageResource(id); 
     } 
    } 


    private void init() { 
     setFocusable(true); 
     mMovie = Movie.decodeStream(mInputStream); 
     mWidth = mMovie.width(); 
     mHeight = mMovie.height(); 

     requestLayout(); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(mWidth, mHeight); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     long now = SystemClock.uptimeMillis(); 

     if (mStart == 0) { 
      mStart = now; 
     } 

     if (mMovie != null) { 

      int duration = mMovie.duration(); 
      if (duration == 0) { 
       duration = 1000; 
      } 

      int relTime = (int) ((now - mStart) % duration); 

      mMovie.setTime(relTime); 

      mMovie.draw(canvas, 0, 0); 
      invalidate(); 
     } 
    } 

    public void setGifImageResource(int id) { 
     mInputStream = mContext.getResources().openRawResource(id); 
     init(); 
    } 

    public void setGifImageUri(Uri uri) { 
     try { 
      mInputStream = mContext.getContentResolver().openInputStream(uri); 
      init(); 
     } catch (FileNotFoundException e) { 
      Log.e("GIfImageView", "File not found"); 
     } 
    } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     GifImageView gifImageView = (GifImageView) findViewById(R.id.GifImageView); 
     gifImageView.setGifImageResource(R.drawable.android); 
    } 
} 

http://www.mavengang.com/2016/05/02/gif-animation-android/

http://www.geeks.gallery/how-to-display-the-animated-gif-image-in-android/

enter image description here

+0

Cela semble bon, pouvez-vous s'il vous plaît m'expliquer comment définir l'image dans ce domaine? merci –

+0

le code est déjà là GifImageView gifImageView = (GifImageView) findViewById (R.id.GifImageView); gifImageView.setGifImageResource (R.drawable.android); –

+0

Merci, j'ai mis en œuvre votre solution, il fonctionne bien :) J'essaie de voter votre réponse, mais il faut 15 réputation, pouvez-vous s'il vous plaît +1 mes deux questions afin que je puisse voter votre réponse? –