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开发中文站”。

相关文章
|
11月前
|
Web App开发 存储 iOS开发
一日一技:把webp图片保存为png
一日一技:把webp图片保存为png
124 0
VC中GDI+双缓冲实现Picture控件中显示png图片
VC中GDI+双缓冲实现Picture控件中显示png图片
166 0
|
Android开发
【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
553 0
【Android 安装包优化】Android 中使用 SVG 图片 ( 批量转换 SVG 格式图片为 Vector Asset 矢量图资源 )
|
存储 Java Android开发
Android保存多张图片到本地
目录介绍 01.实际开发保存图片遇到的问题 02.直接用http请求图片并保存本地 03.用glide下载图片保存本地 04.如何实现连续保存多张图片 05.关于其他介绍 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等.
1281 0
|
C# 移动开发
将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小)
原文:将指定路径下的所有SVG文件导出成PNG等格式的图片(缩略图或原图大小) WPF的XAML文档(Main.xaml):                                   CS代码:(Main.
997 0
|
前端开发 JavaScript
Canvas自定义图片大小及蒙版与生成gif图
Html的Canvas主要通过js脚本做一些图形化操作。Canvas是一个矩形区域,您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
1426 0