我正在研究安卓系统中的360度图像旋转器,链接如下:http://developer.apple.com/safaridemos/showcase/threesixty/
对于这个用例,我简单地使用了40多张图片,当用户水平滚动时,这些图片将以不同的角度显示。使用以下代码:
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度旋转方面造成了问题。
发布于 2012-01-31 22:29:47
您可以尝试将imgArr更改为位图数组,然后使用setImageBitmap而不是setImageResource。如果你只使用40张图片,你应该能够在内存中容纳所有这些图片。在启动时会有一个轻微的延迟(在新的手机上应该小于1秒)来加载所有的位图,但它应该使它平滑,如果位图仍然被引用,GC将不会收集它们。
老实说,它甚至可能不是GC。使用setImageResource会导致在UI线程上读取和解码位图,这可能会导致延迟问题。文档here中记录了这一点。
发布于 2012-01-31 22:30:08
setImageResource()不是一种快速的方法。根据图像的大小,这可能是延迟的主要原因。每次调用它,Android都需要解压缩你的PNG图像文件,这可能需要“很长”的时间。如果资源不占用太多内存,可以考虑将资源预加载到位图中。如果将图像设置到ImageView中也是延迟的原因,请考虑直接在画布上绘制。我已经测试过了,即使在速度很慢的设备上,位图的全屏绘制也可以达到每秒30倍的速度。
https://stackoverflow.com/questions/9080847
复制相似问题