2016-06-16 2 views
0

GridViewまたはListViewに関連するものがあり、画像の幅と高さの値がゼロになることがよくあります(0)ですので、圧縮されたビットマップを計算するためにこの引数を渡したときに例外が発生しますが、私はいくつかのフレームワークをレビューしますが、それでも私にとっては問題です。この問題を解決するためのカーネルソリューションをいくつか取得します。 ImageViewの幅と高さが0の場合はどうすればよいですか。画像をロードしているときにimageViewを処理する方法

public void loadImage(final ImageView imageView, final String imageUrl){ 
    mExecutor.execute(new PriorityRunnable(mThreadsCount) { 

     @Override 
     public void doSomething() { 
      while(!mExecutor.isPause()){ 
       if(imageView != null && imageView.getTag().equals(imageUrl)){ 
        mImageCache.loadImage(imageView, imageUrl); 
       } 
      } 
     } 
    }); 
} 

public void loadImage(ImageView imageView, String imageUrl){ 

    //readFromMemoryCache 
    Bitmap bitmap = getBitmap(imageUrl); 
    if(bitmap != null){ 
     mImageView = imageView; 
     mBitmap = bitmap; 
     mHandler.sendEmptyMessage(DISPLAY_IMAGE); 
     return; 
    } 

    int width = imageView.getWidth(); 
    int height = imageView.getHeight(); 
    //because width = 0, so it doesn't do anything, only return 
    if(width == 0 || height == 0){ 
     return; 
    } 

    //load from http or disk 
    bitmap = getBitmap(imageUrl, width, height); 
    if(bitmap != null){ 
     mImageView = imageView; 
     mBitmap = bitmap; 
     mHandler.sendEmptyMessage(DISPLAY_IMAGE); 
    } 
} 
+1

レイアウトが測定されるまで画像の読み込みを遅らせることができます。それを行う方法の[this so entry](http://stackoverflow.com/questions/12068945/get-layout-height-and-width-at-run-time-android)を参照してください。 – GPuschka

+1

イメージのサイズはどこにありますか? onCreate()で? –

+0

新しいスレッドを作成して画像のサイズを計算します。@ Alex Hong Hong – wislie

答えて

0

グローバルレイアウトリスナーを使用する必要があります。 何かのように:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      if (yourView.getHeight() > 0 && yourView.getWidth() > 0) { 
       CompatUtil.removeOnGlobalLayoutListener(yourView, this); 
       // do your stuff 
      } 
     } 
    }); 
+0

この操作では、ビューの幅と高さが "0"でないことを保証できませんでした。 @kingston – wislie

+1

ビューが配置されている間、onGlobalLayoutは複数回呼び出されます。最後にサイズがゼロになることはなく、removeOnGlobalLayoutListenerを呼び出してもはや呼び出されないようにしてから、画像を表示します。 – kingston

+0

@kingstonに感謝します。私はまだこの質問について混乱しています。これらの画像をロードするには時間がかかりますが、最初の幅と高さは0です。このケースをフィルタリングする必要があります。それ以外の場合はExceptionが発生します。だからこの理由のために、私の画面は画像を表示できませんでした。このリストビューをスクロールすると、イメージが表示されます。私は自分のコードを追加しました。 – wislie

関連する問題