0

RelativeLayout があり、次のように Bitmap に変換したい:

public static Bitmap getBitmapFromView(View view) {
    if (view != null)
    { Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(returnedBitmap);
    Drawable bgDrawable =view.getBackground();
    if (bgDrawable!=null) 
        bgDrawable.draw(canvas);
    else 
        canvas.drawColor(Color.WHITE);
    view.draw(canvas);
    return returnedBitmap;
    }
    else 
        return null;
}

次に、onCreate() メソッドで RelativeLayout cView を動的に作成し、次のように ImageView に設定します。

 dialer = (ImageView) findViewById(R.id.imageView_ring);
 dialer.setImageBitmap(getBitmapFromView(cView));

エラーが発生します:

05-20 13:48:27.509: E/AndroidRuntime(28367): 
  java.lang.RuntimeException: Unable to start activity 
 ComponentInfo{ru.biovamp.widget/ru.biovamp.widget.TestCircleAct}:
 java.lang.IllegalArgumentException: width and height must be > 0

また、onStart() メソッドから ImageView にビットマップを追加しようとしましたが、同じ結果が得られました。どのようなソリューションを使用できますか?

4

1 に答える 1

1

私はこのように私の問題を解決しました:

  public  Bitmap getBitmapFromView() {
    this.measure(MeasureSpec.makeMeasureSpec(createNewRelativeLayoutParams().width, MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(createNewRelativeLayoutParams().height, MeasureSpec.UNSPECIFIED));
    this.layout(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight());
    Bitmap returnedBitmap = Bitmap.createBitmap(this.getMeasuredWidth(), this.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(returnedBitmap);
    this.draw(c);
    return returnedBitmap;
}

解決策は、描画する前に measure() および layout() メソッドを呼び出す必要があることです。

公式説明

于 2013-05-21T09:54:00.337 に答える