我有一些使用新的Palette类的代码,我得到了关于crashlytics的崩溃报告,上面说width and height must be > 0。奇怪的是,这就是我所谓的调色板代码:

if( bitmap == null || bitmap.getHeight() <= 0 || bitmap.getWidth() <= 0){
   //do something
}else{
   Palette.Builder(bitmap).generate(new Palette.PaletteAsyncListener() {
.....
}

所以我只是不确定为什么位图突然没有正确的高度或宽度。我不知道异常来自哪段代码,因为报告只包含palette类中的内容。
以下是例外情况:
java.lang.RuntimeException: An error occured while executing doInBackground()
       at android.os.AsyncTask$3.done(AsyncTask.java:300)
       at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
       at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
       at java.util.concurrent.FutureTask.run(FutureTask.java:242)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.IllegalArgumentException: width and height must be > 0
       at android.graphics.Bitmap.createBitmap(Bitmap.java:815)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:794)
       at android.graphics.Bitmap.createBitmap(Bitmap.java:725)
       at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:601)
       at android.support.v7.graphics.Palette.scaleBitmapDown(Palette.java:282)
       at android.support.v7.graphics.Palette.access$100(Palette.java:67)
       at android.support.v7.graphics.Palette$Builder.generate(Palette.java:557)
       at android.support.v7.graphics.Palette$Builder$1.doInBackground(Palette.java:623)
       at android.support.v7.graphics.Palette$Builder$1.doInBackground(Palette.java:620)
       at android.os.AsyncTask$2.call(AsyncTask.java:288)
       at java.util.concurrent.FutureTask.run(FutureTask.java:237)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at java.lang.Thread.run(Thread.java:818)

我使用的调色板类来自com.android.support:palette-v7:23+
有什么问题吗?

最佳答案

您可能试图在ui元素实际添加到布局之前访问它的宽度和高度。
这就是为什么你得到的宽度和高度等于0,因为元素实际上并不存在。
使用aViewTreeObserver
http://developer.android.com/reference/android/view/ViewTreeObserver.html

    myView.getViewTreeObserver().addOnPreDrawListener(
            new ViewTreeObserver.OnPreDrawListener() {
                public boolean onPreDraw() {

                        int finalHeight = myView.getMeasuredHeight();
                        int finalWidth = myView.getMeasuredWidth();
                        // Do your work here


                    return true;
                }
            });

其中myView将是您的位图

07-28 01:45
查看更多