当Android N显示尺寸设置大于小

时间:2016-08-23 21:51:10

标签: android layout android-7.0-nougat

当新引入的Display size操作系统设置设置为过大的值时,我发布了一个在Android N启动时崩溃的应用程序。

当我查看logcat时,我看到以下消息:

java.lang.RuntimeException: Canvas: trying to draw too large(106,975,232 bytes) bitmap.

我在第一个Activity中将问题追溯到ImageView,它显示了一个漂亮的大背景图像。有问题的图片是2048x1066,位于我的通用drawables目录中,因此无论密度如何,都会使用此图片。

Display size设置为Small时,一切正常。但当我走到Default时,它就会停止工作。如果我然后用较小的图像交换图像,它可以在Default处工作,但如果我上升到Large,它将再次停止工作。

我的猜测是,调整Display size会导致您的设备像具有更高像素密度的物理上更小的设备一样运行。但我不明白我应该在这做什么。如果我逐渐增加较小的图像以逐渐提高分辨率,那么在实际大型显示器上看起来不会很好。或者我不明白什么?

任何指针都会非常感激。

12 个答案:

答案 0 :(得分:121)

我的情况是,将(高分辨率)启动位图从 drawable 移动到 drawable-xxhdpi 是解决方案。

我遇到了同样的问题。我没有怀疑我的启动画面是问题,因为在启动应用程序时显示 ,但事实证明启动画面是问题。

在我的情况下,启动画面具有xxhdpi分辨率,并且它被错误地放在 drawable 文件夹中,而不是 drawable-xxhdpi 。这使Android假设启动画面具有mdpi分辨率,并将图像缩放到所需大小的3 * 3倍并尝试创建位图。

答案 1 :(得分:10)

我不知道会对某人有所帮助,但我会把它放在这里。 在我的情况下 - 问题只出现在使用Android 7的Sumsung设备上,并且问题在于闪屏比例。将高度更改为1024 px后 - 一切正常

答案 2 :(得分:9)

将您在drawable中的图像移动到mipmap-xxhdpi。您的图像是位图格式,因此您应该将图像放在mipmap文件夹中,然后它将起作用

答案 3 :(得分:3)

尝试使用Bitmap.Factory类,此链接将帮助您 Loading Large Bitmaps Efficiently

答案 4 :(得分:2)

就我而言,我在清单文件的android:hardwareAccelerated="false"中添加了applicationg后解决了问题。

答案 5 :(得分:2)

如果您使用Picasso像这样将Glide更改为Glide。

删除毕加索

Picasso.get().load(Uri.parse("url")).into(imageView)

更改滑行

Glide.with(context).load("url").into(imageView)

更高效

答案 6 :(得分:1)

在某些情况下,原始位图需要绘制到ImageViews,照片编辑应用程序等中,

如上述设置中的托架

android:hardwareAccelerated="false"

将导致不良的UI体验,您可以将hardwareAccelerated设置为仅选择一个要绘制高分辨率图像的活动

<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>

答案 7 :(得分:0)

图标文件太大,无法让Android高效,流畅地加载。 Android通过其智能算法识别出这一点。

您可以使用asystat使用Final Android Resizer调整图标文件的大小。将它们调整为“xhdpi”或更低。

将已调整大小的照片放在可绘制或覆盖现有的大图标文件上。

然后,你已经完成了。

答案 8 :(得分:0)

如果使用滑行,并且一次加载1k图像或某些图像,则是滑行问题或用于设置图像视图的任何操作。您只需在滑行中应用比例类型即可解决该问题。

答案 9 :(得分:0)

就我而言,我只是使用Paint3d更改了在背景中使用的图像画布(或者您可以使用其他任何画布)。 Here I am sharing a screenshot just go through it.

答案 10 :(得分:0)

可以通过将图像调整为较小的尺寸来解决。

答案 11 :(得分:0)

我检查了Logcat

进程:co.coolresume,PID:11145 java.lang.RuntimeException:画布:试图绘制太大的(572166144bytes)位图。 在android.view.DisplayListCanvas.throwIfCannotDraw(DisplayListCanvas.java:229) 在android.view.RecordingCanvas.drawBitmap(RecordingCanvas.java:97) 在android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:529) 在android.widget.ImageView.onDraw(ImageView.java:1367) 在android.view.View.draw(View.java:19380)

我使用下一个清单解决了错误

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:hardwareAccelerated="false">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>