web-dev-qa-db-ja.com

「キャンバス:大きすぎるビットマップを描画しようとすると」Android N表示サイズが小よりも大きく設定されている場合

新しく導入されたDisplay size OS設定が大きすぎる値に設定されていると、Android Nで起動時にクラッシュする公開アプリがあります。

Logcatを見ると、次のメッセージが表示されます。

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

最初のアクティビティで、素敵な大きな背景画像を表示するIm​​ageViewに問題をトレースしました。問題の画像は2048x1066で、私の汎用drawablesディレクトリにあるため、密度に関係なく、この画像が使用されます。

Display size設定がSmallの場合、すべて正常に機能します。しかし、Defaultに移動すると、機能しなくなります。その後、イメージを小さいイメージと交換すると、Defaultで機能しますが、Largeに移動すると、機能しなくなります。

私の推測では、Display size upを調整すると、デバイスは、ピクセル密度が高く、物理的に小さいデバイスのように動作します。しかし、私はここで何をすべきかを理解していません。解像度を段階的に上げるために画像を段階的に小さくすると、実際の大きなディスプレイでは見栄えがよくなくなります。それとも私は何かを理解していないのですか?

どんなポインタでも大歓迎です。

53
Brian Rak

私の場合、(高解像度)スプラッシュビットマップをdrawableからdrawable-xxhdpiに移動することが解決策でした。

同じ問題がありました。アプリの起動時にが表示されるため、スプラッシュスクリーンに問題があるとは思わなかったが、スプラッシュスクリーンに問題があることが判明した。

私の場合のスプラッシュ画面の解像度はxxhdpiで、誤ってdrawable-xxhdpiではなくdrawableフォルダーに配置されました。これにより、Androidは、スプラッシュスクリーンの解像度がmdpiであると想定し、画像を必要なサイズの3 * 3倍にスケーリングし、ビットマップを作成しようとしました。

121
Johan Franzén

私はそれが誰かを助けるだろうかわかりませんが、私はそれをここに残します。私の場合-問題はAndroid 7のSumsungデバイスでのみ発生し、問題はスプラッシュスクリーンのプロポーションにありました。高さを1024ピクセルに変更した後-すべてが正常に動作します

11
kazimad

ドロアブル内の画像をmipmap-xxhdpiに移動します。画像はビットマップ形式であるため、mipmapフォルダーに画像を配置する必要があります。

9

私の場合、マニフェストファイルのapplicationgAndroid:hardwareAccelerated="false"を追加して問題を解決しました。

3
CHAMCHOUN

Bitmap.Factoryクラスを使用してみてください。このリンクはあなたを助けます 大きなビットマップを効率的にロードする

3
Khalid Ali

私の場合、Paint3dを使用して、背景で使用される画像のキャンバスを変更しました(または、他のものを使用できます)。 ここでスクリーンショットを共有しているだけです。

0
Vishaljoshi007

アイコンファイルが大きすぎるため、Androidを効率的かつスムーズにロードできません。 Androidは、スマートアルゴリズムでこれを認識します。

Final Android Resizer by asystatを使用して、アイコンファイルのサイズを変更できます。それらを「xhdpi」以下にサイズ変更します。

サイズ変更した写真をドロアブルに配置するか、既存の大きなアイコンファイルを上書きします。

これで完了です。

0
lloydyu24

グライドを使用していて、一度に1k枚の画像またはいくつかの画像を読み込んでいる場合は、グライドまたは画像ビューの設定に使用しているものが問題です。グライドにスケールタイプを適用するだけで解決できます。

0
Deepak Rajput