AssetManager读取assets下多张图片资源输出到ImageView动画

简介:

这里面有几个要点和环节需要注意:

1,AssetManager读取事先放置到assets目录下的原始图片资源文件,组装成Android的Bitmap数组。

文件结构如图:

e236fa5df6960fc509e800cb0d2db46891137479

2,把1中读取到的Bitmap数组每隔一个较小时间内(如25ms)不间断循环设置到ImageView里面,从而在视觉上形成一种动画效果。

代码:

package zhangphil.test;

import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import java.io.InputStream;
import java.util.concurrent.TimeUnit;

public class AnimationActivity extends AppCompatActivity {
    private boolean mStartLoadingAnimation = false;
    private ImageView mImageView;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.animation_activity);
        mImageView = findViewById(R.id.image);

        mStartLoadingAnimation = true;
        loadingAnimation();
    }

    private void loadingAnimation() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Bitmap[] bitmaps = getBimaps();
                if (bitmaps == null || bitmaps.length == 0) {
                    return;
                }

                int i = 0;
                while (mStartLoadingAnimation) {
                    mImageView.setImageBitmap(bitmaps[i++ % bitmaps.length]);

                    try {
                        TimeUnit.MILLISECONDS.sleep(25);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    private Bitmap[] getBimaps() {
        final String parentPath = "loading";

        Bitmap[] bitmaps = null;
        AssetManager am = getAssets();
        try {
            String[] files = am.list(parentPath);
            bitmaps = new Bitmap[files.length];
            for (int i = 0; i < files.length; i++) {
                InputStream is = am.open(parentPath + "/" + files[i]);
                bitmaps[i] = BitmapFactory.decodeStream(is);
                is.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return bitmaps;
    }
}


原文发布时间为:2018-08-19

本文来自云栖社区合作伙伴“Android开发中文站”,了解相关信息可以关注“Android开发中文站”。

相关文章
VC中GDI+双缓冲实现Picture控件中显示png图片
VC中GDI+双缓冲实现Picture控件中显示png图片
225 0
|
数据安全/隐私保护 Android开发
Android为图片添加水印,裁剪图片,旋转图片工具类
Android为图片添加水印,裁剪图片,旋转图片工具类
173 0
|
Android开发
【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
643 0
【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
|
C# 移动开发
将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml):                                   CS代码:(Main.
1035 0
|
前端开发 JavaScript
Canvas自定义图片大小及蒙版与生成gif图
Html的Canvas主要通过js脚本做一些图形化操作。Canvas是一个矩形区域,您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
|
Android开发
Android把Bitmap保存为PNG图像文件的简单方法(同步)
public static void saveBitmapAsPng(Bitmap bmp,File f) { try { FileOutputStream out = new FileOutputStream(f); bmp.
1773 0
|
Android开发
探索Glide对Gif图片资源的获取、解析过程
先预祝大家汤圆节快乐!很久没写博客了。今天我们来探索一下Glide是如何支持Gif图片加载的。 本篇博客的目的 了解代码分析的基本思路与方法 了解Glide是如何对Gif图片进行支持的 探索背景 为什么会有这么一个想法呢,一来一直对Glide是知其名而不知其所以然,二来还主要是工作中需要对它研究研究,以便更好的支持工作内容。
1522 0