penfeizhou
APNG4Android
Java

Android animation support for APNG & Animated WebP & Gif & Animated AVIF, High performance

Last updated Jun 12, 2026
664
Stars
91
Forks
22
Issues
0
Stars/day
Attention Score
50
Language breakdown
Java 92.1%
C++ 4.7%
Kotlin 2.9%
C 0.2%
CMake 0.2%
β–Έ Files click to expand
README

Animation Android

  • Support APNG & Animated Webp & Gif & AVIF in Android
  • Efficient decoder
  • Support Drawable usage and glide library module
  • Support animation play control
  • Support still image
  • Low memory usage

δΈ­ζ–‡ζ–‡ζ‘£

Released versions

Usages

Add dependency in build.gradle

repositories {
    mavenCentral()
}

Animated WebP

dependencies {
    implementation 'com.github.penfeizhou.android.animation:awebp:${VERSION}'
}

APNG

dependencies {
    implementation 'com.github.penfeizhou.android.animation:apng:${VERSION}'
}

Gif

dependencies {
    implementation 'com.github.penfeizhou.android.animation:gif:${VERSION}'
}

AVIF

dependencies {
    implementation 'com.github.penfeizhou.android.animation:avif:${VERSION}'
}

Notice Before Use!

Don't put APNG resources in your drawable or mipmap directory! During the process of release building of an Android app, the aapt tool will zip & modify the frame info of the APNG file, which will lead to an abnormal behavior when playing it. Thus, please put the APNG resources in raw or assets folder instead.

Use

// Load from asset file
AssetStreamLoader assetLoader = new AssetStreamLoader(context, "wheel.png");

// Load form Resource ResourceStreamLoader resourceLoader = new ResourceStreamLoader(context, R.drawable.sample);

// Load from file FileStreamLoader fileLoader = new FileStreamLoader("/sdcard/Pictures/1.webp");

// Create APNG Drawable APNGDrawable apngDrawable = new APNGDrawable(assetLoader);

//Create Animated webp drawable WebPDrawable webpDrawable = new WebPDrawable(assetLoader);

//Create Animated avif drawable AVIFDrawable avifDrawable = new AVIFDrawable(assetLoader);

// Auto play imageView.setImageDrawable(apngDrawable);

// Not needed.default controlled by content apngDrawable.setLoopLimit(10);

// Implement Animatable2Compat drawable.registerAnimationCallback(new Animatable2Compat.AnimationCallback() { @Override public void onAnimationStart(Drawable drawable) { super.onAnimationStart(drawable); } });

Glide support

Add dependency in build.gradle

repositories {
    ...
    mavenCentral()
}
dependencies {
    implementation 'com.github.penfeizhou.android.animation:glide-plugin:${VERSION}'
}

Direct use

Glide.with(imageView).load("https://misc.aotu.io/ONE-SUNDAY/SteamEngine.png").into(imageView);
Glide.with(imageView).load("https://isparta.github.io/compare-webp/image/gif_webp/webp/2.webp").into(imageView);

Welcome to join the talk

image

Star History

Star History Chart

Β© 2026 GitRepoTrend Β· penfeizhou/APNG4Android Β· Updated daily from GitHub