相关疑难解决方法(0)

显示动画GIF

我想在我的应用程序中显示动画GIF图像.正如我发现的那样,Android本身并不支持动画GIF.

但是它可以使用AnimationDrawable显示动画:

开发>指南>图像和图形> Drawables概述

该示例使用在应用程序资源中保存为帧的动画,但我需要的是直接显示动画gif.

我的计划是将动画GIF分解为帧并将每个帧添加为可绘制到AnimationDrawable.

有谁知道如何从动画GIF中提取帧并将它们转换为Drawable

java android animated-gif

254
推荐指数
13
解决办法
37万
查看次数

如何在动态壁纸,中心裁剪和适合宽度/高度适合视频?

背景

我正在制作一个可以显示视频的动态壁纸.一开始我认为这将非常困难,所以有些人建议使用OpenGL解决方案或其他非常复杂的解决方案(例如这个).

无论如何,为此,我发现了各种各样的地方,并且基于这个github库(它有一些bug),我终于得到了它的工作.

问题

虽然我成功地显示了一个视频,但我无法找到控制它与屏幕分辨率相比如何显示的方法.

目前它总是被拉伸到屏幕尺寸,这意味着这个(从这里拍摄的视频):

在此输入图像描述

得到如下:

在此输入图像描述

原因是不同的宽高比:560x320(视频分辨率)与1080x1920(设备分辨率).

注意:我很清楚缩放视频的解决方案,这些解决方案可以在各种Github存储库中找到(例如这里),但我问的是一个动态壁纸.因此,它没有View,所以它对如何做事更加有限.更具体地说,解决方案不能具有任何类型的布局,TextureView或SurfaceView或任何其他类型的View.

我试过的

我尝试使用SurfaceHolder的各种领域和功能,但到目前为止没有运气.例子:

这是我目前的代码(这里有完整的项目):

class MovieLiveWallpaperService : WallpaperService() {
    override fun onCreateEngine(): WallpaperService.Engine {
        return VideoLiveWallpaperEngine()
    }

    private enum class PlayerState {
        NONE, PREPARING, READY, PLAYING
    }

    inner class VideoLiveWallpaperEngine : WallpaperService.Engine() {
        private var mp: MediaPlayer? = null
        private var playerState: PlayerState = PlayerState.NONE

        override fun onSurfaceCreated(holder: SurfaceHolder) {
            super.onSurfaceCreated(holder)
            Log.d("AppLog", "onSurfaceCreated")
            mp = …
Run Code Online (Sandbox Code Playgroud)

android live-wallpaper android-mediaplayer

61
推荐指数
2
解决办法
2948
查看次数

如何在视图和动态壁纸中拟合GIF动画的内容?

背景

我有一个小型动态壁纸应用程序,我想添加支持它来显示GIF动画.

为此,我找到了各种解决方案.有一种在视图(这里)中显示GIF动画的解决方案,甚至还有一个解决方案,可以在动态壁纸(这里)中显示它.

但是,对于它们两者,我无法找到如何在其所拥有的空间中很好地拟合GIF动画的内容,这意味着以下任何一种情况:

  1. 中心裁剪 - 适合100%的容器(在这种情况下为屏幕),在需要时在侧面(顶部和底部或左侧和右侧)裁剪.不伸展任何东西.这意味着内容似乎很好,但并非所有内容都可能显示出来.
  2. fit-center - 拉伸以适合宽度/高度
  3. center-inside - 设置为原始大小,居中,并且只有在太大时才能拉伸以适合宽度/高度.

问题

这些都不是关于ImageView的,所以我不能只使用scaleType属性.

我发现了什么

有一个解决方案可以为你提供一个GifDrawable(这里),你可以在ImageView中使用它,但在某些情况下它似乎很慢,我无法弄清楚如何在LiveWallpaper中使用它然后适合它.

LiveWallpaper GIF处理的主要代码就是这样(这里):

class GIFWallpaperService : WallpaperService() {
    override fun onCreateEngine(): WallpaperService.Engine {
        val movie = Movie.decodeStream(resources.openRawResource(R.raw.cinemagraphs))
        return GIFWallpaperEngine(movie)
    }

    private inner class GIFWallpaperEngine(private val movie: Movie) : WallpaperService.Engine() {
        private val frameDuration = 20

        private var holder: SurfaceHolder? = null
        private var visible: Boolean = false
        private val handler: Handler = Handler()
        private val drawGIF …
Run Code Online (Sandbox Code Playgroud)

android animated-gif

30
推荐指数
2
解决办法
890
查看次数

如何在Android应用程序中显示动画GIF图像?

我想在Android应用程序中显示动画GIF图像,如下图所示.我尝试过webview但没有成功.如何在应用程序中显示动画gif?在此输入图像描述

user-interface android

29
推荐指数
4
解决办法
8万
查看次数

在imageview中播放动画GIF图像文件

我正在制作一个Android应用程序,我想在imageview中播放一个GIF文件.我尝试了很多方法,做了一个自定义类但没有成功.

有没有人以前实现过这个?

java android

7
推荐指数
2
解决办法
3万
查看次数