Android:在ImageView中使用大图片的速度较慢

我有一个Activity ,我在ImageView中有一个背景图像,在图像顶部有九个透明button。

http://sofzh.miximages.com/android/GGQqd.png

当我点击任何一个button时,我会在背景的顶部出现一个RelativeLayout

http://sofzh.miximages.com/android/JvKQK.jpg

问题是:当我在布局中使用大分辨率图像作为背景时,性能非常差。

我使用的是2048 x 1536PNG图片,重量约为500k。 当我使用像1024 x 768这样的小图像时,应用程序可以正常工作,但看起来很糟糕。

是否有限制或方法使用大图像,而不会失去性能?

Solutions Collecting From Web of "Android:在ImageView中使用大图片的速度较慢"

该位图是巨大的 。 你提到的500k是压缩的大小。 使用它们时,图像在内存中未压缩。 实际上你正在寻找2048×1536×4 = 12582912 =超过12MB的内存使用量。

如果你使用Nexus 9这样的屏幕分辨率的设备,那么你可以合理地假设它也有内存,GPU和总线带宽来处理这个尺寸的图像。 但是,如果你使用的是较低分辨率的设备(大多数设备,请记住,即使是全高清也只有65%),那么这个图像就是非常浪费内存。 今天,您可以购买240×320的低端设备,其中全屏位图仅为图像大小的2.5%。

加载时你将不得不缩放该图像。 加载图像之前,使用BitmapFactory.Options来设置所需的大小。

而且,你将文本直接放在上面。 文本渲染需要alpha透明度,这需要对底层图像进行采样。 如果你可以把文本放在不透明的背景上,那么你也可以节省一些GPU的负载,但是我实际上不确定会给你带来多less性能。 这可能不是什么大事。

您可以使用Dave Morissey的Subsampling Scale图像视图来替代标准图像视图。

XML布局:

 <com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:id="@+id/photo"/> </RelativeLayout> 

在代码中设置图片并禁用触摸:

 photo = (SubsamplingScaleImageView) view.findViewById(R.id.photo); photo.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); photo.setImage(ImageSource.uri(Uri.fromFile(new File("/somepath/file.png")))); 

的build.gradle:

compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.6.0'