Java 安卓如何做图像屏幕幻灯片?

Java 安卓如何做图像屏幕幻灯片?,java,android,image-processing,Java,Android,Image Processing,我正在android上建立一个非常基本的图库,它显示相机文件夹上的最后一张图片,用户可以向左滑动查看上一张图片 我完成了一个使用viewpager的实现,以及一个使用sampleSize缩放图像的pagerAdapter。我的问题是,这个实现没有默认的gallery应用程序那么高效,每次你滑动一个图像时,你必须等待大约200毫秒才能加载下一个图像。因此,基本上我关于如何实施它的想法是行不通的 我如何才能有效地做到这一点,如果可能的话,通过一个允许以后放大和缩小的实现 这看起来很有希望,但我不知

我正在android上建立一个非常基本的图库,它显示相机文件夹上的最后一张图片,用户可以向左滑动查看上一张图片

我完成了一个使用viewpager的实现,以及一个使用sampleSize缩放图像的pagerAdapter。我的问题是,这个实现没有默认的gallery应用程序那么高效,每次你滑动一个图像时,你必须等待大约200毫秒才能加载下一个图像。因此,基本上我关于如何实施它的想法是行不通的

我如何才能有效地做到这一点,如果可能的话,通过一个允许以后放大和缩小的实现


这看起来很有希望,但我不知道如何用文件而不是绘图来实现它


编辑:

我已经设法使用photoview(一个被黑客攻击的viewpager)提高了一点速度,但是将文件路径转换为位图或可绘制文件需要花费太多的时间

我尝试过dilix和iDroid Explorer建议的这两种方法:

// Method A
Drawable d = Drawable.createFromPath(imagePath);
imageView.setImageDrawable(d);

// Method B
Bitmap myBitmap = BitmapFactory.decodeFile(imagePath);
imageView.setImageBitmap(myBitmap);

但两者都会产生错误
位图,该位图太大,无法上载到纹理中。我需要尽可能快地将图像发送到imageView,并以某种方式绕过此错误,也许我会获得相当快的速度。现在我正在缩放图像并将其转换为可绘制图像,但效率不高

查看这个很棒的网站: 也许这就是你想要的:

它具有页面滚动、缩放和平移功能 我已经在我的项目中使用了它,并进行了一些修改和延迟图像加载。它完全按照您的需要工作。

1)

这看起来很有希望,但我不知道如何用文件实现它 而不是抽绳

您不必在适配器中存储可拔取的列表,而是存储sd卡上文件的链接,然后加载它

2) 但我可以想象,用文件而不是绘图将不会如此有效,因为要从文件加载,必须从sd卡解析它

我认为您可以通过同时在内存中加载多个图像(压缩)来节省时间,当您切换到其他图像时,您已经拥有了图像和内存,并且在切换时可以开始在内存中加载其他图像

当你翻过画廊时,你可能不会加载图片,并且在几乎停止后加载

这是主要的问题:内存消耗与性能

更新

我认为比自己探索更好的方法是探索google gallery的现有代码:


正如我所检查的那样,它们存储缓存(几乎正如我所说的加载多个位图),并且只存储大小调整后的图像,这似乎很有效。

请参阅官方文档,以获得一个很好的示例,该示例将引导您高效地使用位图和viewpager。您应该使用已加载图像的缓存,并且图像应该在UI线程之外加载。您还希望将图像缩放到显示所需的最小大小(通常为二次幂-注意,图像不会始终缩放到您要求的大小!) ViewPager还会在后台加载图像,为下一张幻灯片做准备,下一张幻灯片是用setOffScreenPageLimit方法设置的(默认值通常很好,我认为是2)


我不确定您是否得到了正确的解决方案。但是,如果您想使用给定链接继续您自己的实现,那么:

http://www.androidviews.net/2012/11/photoview/   //this link is given in your question
您可以查看如何将文件的路径转换为可绘制文件。现在,您可以绘制指定文件,并在给定的链接上实现

我觉得这个链接会很好用


欢迎发表评论。

我刚刚测试过,效果很好。但我一直在研究代码,没有找到任何方法用图像文件而不是绘图来实现它。我将开始检查是否可以将它与我的实现结合起来,但我认为它不会起作用
将SD卡文件路径转换为可提取文件。然而,它仍然相当低效。也许有一种方法可以使用文件路径查看.setImage?(无需转换)这将引导我走上正确的道路。我必须弄清楚如何进行惰性图像加载,如果可能的话,可能还需要弄清楚如何更改viewpager动画。您知道如何禁用“收缩打开/关闭缩放”吗?您可以使用Gallery。您必须知道,您注意到的延迟是由于轮询文件造成的!因此,如果您注意到androidviews.net非常快,请记住它使用的是可绘制文件,而不是图像文件!起初我认为这个例子很糟糕,但它确实允许快速滑动。但这需要永远的开始。我会看看我是否能实现itI,我一直在尝试动态加载图像文件,但似乎不可能在ImageURL中加载它们,因为ImageURL是最终的和静态的。请检查我试过的,也许你能想出一个解决方案:你是想叫pathsList,imageList吗?然后,由于imageUrls是最后一个变量,您只能分配它一次。您可以使用
public final static String[]imageUrls=imageList.toArray(新字符串[imageList.size()])
也许我误解了您的第一点,我的适配器中有一个文件列表,但我必须将它们转换为可绘制文件,因为我不知道任何其他方法可以将它们添加到图像视图中我会这样做(
imageView.setImageDrawable(GetDrawable(imagePath,150,150));
)。有没有一种不进行此转换就显示图像的方法?它可能会节省大量资源您可以加载位图(压缩,可以一次加载示例3-当前、上一个和下一个)并将此位图加载到视图,如下所示:我刚刚尝试了另一个问题的实现,但出现错误:
位图太大,无法上载到纹理(2560x1920,max=2048x2048)
但似乎很接近。这与压缩有关吗?我不知道如何加载压缩的文件,你知道如何绕过此错误吗?我还不知道,但如果这样做有效,我就不必改变