如何在背景中处理大图像的活动?

时间:2016-01-05 12:21:11

标签: android

我有一个小活动,活动很少,每个活动都有一个图像作为背景。

由于每个图像都很大(全高清),它会快速占用内存,从而使整个应用程序因内存不足而导致缓慢甚至崩溃。

你如何处理这样的事情?

4 个答案:

答案 0 :(得分:2)

为什么要尝试加载 Full HD 图像,因为较低的Android设备甚至无法加载它。加载全高清图像会占用你的整个内存,让你的应用程序显得迟钝。

最佳解决方案是:

  1. 使用Photoshop,草图等任何设计工具使用近似或点击跟踪方法裁剪图像(推荐hdpi: 480x800 px
  2. 然后压缩图像而不使其有损。在课堂上使用TinyPNG
  3. 最后在drawable-nodpi中创建一个名为res的文件夹(如果它尚不存在)。并将格式化的图像放在drawable-nodpi
  4. drawable-nodpi拥有适用于所有密度的资源。这些是与密度无关的资源。无论当前屏幕的密度如何,系统都不会缩放用此限定符标记的资源。

    参考:

答案 1 :(得分:0)

尝试使用导入功能将照片导入您的开发环境,例如。以下是使用Android Studio导入图像资源的方法。右键单击Drawable,选择new,选择图像资源,导入图像,android将创建5个针对Android设备优化的图像,请务必使用小写字母命名图像名称。祝你好运

答案 2 :(得分:0)

根据android中的以下缩放使用图像 Check this link for more specification

  xxxhdpi: 1280x1920 px
  xxhdpi: 960x1600 px
  xhdpi: 640x960 px
  hdpi: 480x800 px
  mdpi: 320x480 px
  ldpi: 240x320 px

答案 3 :(得分:0)

有几种方法可以做到。

选项1:

为不同的dpi创建不同的完美图像,并将它们放在相关的可绘制文件夹中。然后设置

android:background="@drawable/your_image

选项2:

创建适合您布局的缩放位图..

    /* adapt the image to the size of the display */
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    Bitmap bmp = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(
      getResources(),R.drawable.background),size.x,size.y,true);

    BitmapDrawable background = new BitmapDrawable(bmp );
   layout.setBackgroundDrawable(background);

选项3:

每次都不需要创建bitmat图像。你可以在第一次创建后把它放在Cache内存中。然后尝试从Cache中获取如果没有找到,则再次将您的可绘制图像作为位图处理并将其放入缓存并使用它。这将是更快的过程..

有一个更详细的链接.. Caching Bitmaps