我正在使用Android中的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度旋转的平滑问题。
答案 0 :(得分:0)
您可以尝试将imgArr更改为Bitmap数组,然后使用setImageBitmap而不是setImageResource。如果您只使用40张图像,那么您应该能够将所有这些图像放在内存中。启动时会有轻微的延迟(在较新的手机上应该<1秒)以加载所有位图,但它应该使其顺利,如果仍然引用它们,GC将不会收集位图。
说实话甚至可能不是GC。使用setImageResource会导致在UI线程上读取和解码位图,这可能会导致延迟问题。这在文档here中有说明。
答案 1 :(得分:0)
setImageResource()不是一种快速方法。根据图像的大小,这可能是延迟的主要来源。每次调用时,Android都需要解压缩您的PNG图像文件,这可能需要很长时间。如果不占用太多内存,请考虑将资源预先加载到位图中。如果将图像设置为ImageView也是延迟的来源,请考虑直接在画布上绘图。我已经测试了这个,甚至在慢速设备上,位图的全屏绘制每秒至少可以发生30次。