it-swarm.dev

Android Studio Canvas: Çok büyük bitmap çizme

Ubuntu 16.04 kullanıyorum. Ve Android Studio'da uygulamamı emülatörde çalıştırmaya çalıştığımda aşağıdaki hatayı alıyorum:

FATAL YÜRÜTME: ana Süreç: burada proje adı , PID: 2528 Java.lang.RuntimeException: Canvas: çok büyük (216090000bytes) bitmap ..__ çizmeye çalışıyor. Android.view.DisplayListCanvas.throwIfCannotDraw (DisplayListCanvas.Java:260) .__ 'da. Android.graphics.Canvas.drawBitmap adresinde (Canvas.Java:1415) Android.graphics.drawable.BitmapDrawable.draw (BitmapDrawable.Java:528) .__ 'da. Android.widget.ImageView.onDraw'de (ImageView.Java:1316) Android.view.View.draw (View.Java:17185) .__ 'da. Android.view.View.updateDisplayListIfDirty'de (View.Java:16167) Android.view.View.draw (View.Java:16951) .__ 'da. Android'de görüntüle.View.ViewGroup.drawChild (ViewGroup.Java:3727) Android'de görüntüle.View.ViewGroup.dispatchDraw (ViewGroup.Java:3513) Android.view.View.updateDisplayListIfDirty'de (View.Java:16162) Android.view.View.draw (View.Java:16951) .__ 'da. Android'de görüntüle.View.ViewGroup.drawChild (ViewGroup.Java:3727) Android.view.ViewGroup.dispatchDraw şirketinde (ViewGroup.Java:3513)
vb...

Öyleyse emülatörümün çalışmasını sağlamak için bazı çemberlerin üzerinden geçmek zorunda kaldım, öyleyse bir sym-link oluşturmak gerekiyordu; Sorunun bir parçası olup olmadığından emin değilim. Ve benim hayatım boyunca, bunu neden yapmaya devam ettiğini anlayamıyorum. Grubumda, aynı öykünmüş telefonda ve SDK'da projeyi gayet iyi ayarlayan başkaları da var.

39
Francisco

Resminizi (hi-res) drawable to drawable-xxhdpi konumuna getirin. Ancak uygulama geliştirmede, büyük görüntü kullanmanıza gerek yoktur. APK dosya boyutunu artıracak.

103

Ben de aynı problemi yaşadım . Bazı düşük çözünürlüklü cihazlara çok büyük bir resim yüklemeye çalışırsanız, uygulama çökecek . Farklı boyutlarda (hdpi, xxdpi ve daha fazlası) birkaç resim çekebilirsiniz. Sorunu hızlı ve etkili bir şekilde çözen görüntüleri yüklemek için basit bir harici kütüphane kullanın .. .. Glide kütüphanesini kullandım (Picasso gibi başka bir kütüphaneyi kullanabilirsiniz).

    panel_IMG_back = (ImageView) findViewById(R.id.panel_IMG_back);
    Glide
            .with(this)
            .load(MyViewUtils.getImage(R.drawable.wallpaper)
            .into(panel_IMG_back);
7
Guy4444

Sorunu, uygulamamızda o zaman kullandığımız ana imajdı. Resmin gerçek boyutu çok büyüktü, bu yüzden sıkıştırdık. Sonra bir cazibe gibi çalıştı, kalite kaybı yok ve uygulama emülatörde iyi çalıştı.

4
Francisco

picasso değişikliği kullanırsanız Glide bu şekilde.

Picasso’yu kaldır

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

Glide'yi değiştir

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

Picasso'dan büyük bitmap'e göre daha verimli Glide

0
Deniz

Çünkü bu hata başkalarının dediği gibi çizilebilir bir dizinde bulunan büyük bir görüntünün (1800px X 900px) dediği gibi, görüntüyü düzenledim ve photoshop kullanarak orantılı olarak küçültdüm ve çalıştı ... 

Benim durumumda Android platformunu kaldırıp tekrar eklemek zorunda kaldım. Bir şey sıkışıp kaldım ve tüm kodumu başka bir uygulamaya kopyalamak bir cazibe işlevi gördü - bu yüzden platformu kaldırarak Android için yapıyı temizleme fikrim var.

cordova platform remove Android
cordova platform add Android

Sanırım zaman zaman yapmanız gereken bir çeşit temizlik var :-(

0
pieroxy

Bu kayma meselesidir, bu yüzden birçok görüntüye yüklemeye çalışırken bunu kullanın ve bazıları çok daha büyük: Glide.load("your image path") .transform( new MultiTransformation<>( new CenterCrop(), new RoundedCorners( holder.imgCompanyLogo.getResources() .getDimensionPixelSize(R.dimen._2sdp) ) ) ) .error(R.drawable.ic_nfs_default) .into(holder.imgCompanyLogo); } 

0
Deepak Rajput