首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在同一个ImageView中频繁流畅地切换大量镜像?

如何在同一个ImageView中频繁流畅地切换大量镜像?
EN

Stack Overflow用户
提问于 2012-01-31 22:04:36
回答 2查看 689关注 0票数 0

我正在研究安卓系统中的360度图像旋转器,链接如下:http://developer.apple.com/safaridemos/showcase/threesixty/

对于这个用例,我简单地使用了40多张图片,当用户水平滚动时,这些图片将以不同的角度显示。使用以下代码:

代码语言:javascript
运行
复制
public boolean onScroll
      (MotionEvent e1, MotionEvent e2, float distanceX, float  distanceY) 
 {      
    Log.i(TAG, "distanceX = "+distanceX);
    if(distanceX > 3){
        if(imageCounter < imgArr.length - 1){
            imageCounter++;             
        }else{
            imageCounter = 0;               
        }
        imageSwitcher.setImageResource(imgArr[imageCounter]);

    }else if(distanceX < -3){
        if(imageCounter > 0){
            imageCounter--;
        }else{
            imageCounter = imgArr.length - 1; 
        }
        imageSwitcher.setImageResource(imgArr[imageCounter]);
    }
    return true;
 }

我的问题是图像的切换不够流畅。看看Logcat就会发现,在图像中每切换2-3次,垃圾收集器就会完成它的工作,每次大约需要20毫秒完成它的工作。这几毫秒在获得平滑的360度旋转方面造成了问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-31 22:29:47

您可以尝试将imgArr更改为位图数组,然后使用setImageBitmap而不是setImageResource。如果你只使用40张图片,你应该能够在内存中容纳所有这些图片。在启动时会有一个轻微的延迟(在新的手机上应该小于1秒)来加载所有的位图,但它应该使它平滑,如果位图仍然被引用,GC将不会收集它们。

老实说,它甚至可能不是GC。使用setImageResource会导致在UI线程上读取和解码位图,这可能会导致延迟问题。文档here中记录了这一点。

票数 0
EN

Stack Overflow用户

发布于 2012-01-31 22:30:08

setImageResource()不是一种快速的方法。根据图像的大小,这可能是延迟的主要原因。每次调用它,Android都需要解压缩你的PNG图像文件,这可能需要“很长”的时间。如果资源不占用太多内存,可以考虑将资源预加载到位图中。如果将图像设置到ImageView中也是延迟的原因,请考虑直接在画布上绘制。我已经测试过了,即使在速度很慢的设备上,位图的全屏绘制也可以达到每秒30倍的速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9080847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档