1

私はAndroid2.1とEclipseを使用しています。

寸法が250x250の2つのコンポーネントでLinearLayoutを定義しました。

LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);

LinearLayout.LayoutParams llp = 
  new llp.LayoutParams(250, 250);

meter1View = new MeterView(this, "Meter 1");
ll.addView(meter1View, llp);
meter2View = new MeterView(this, "Meter 2");
ll.addView(meter2View, llp);   
ScrollView scrollView = new ScrollView(this);
scrollView.addView(ll);
setContentView(scrollView);

ここまでは順調ですね。エミュレーター画面に2つの垂直コンポーネントが表示されます。

ただし、Meter Viewクラスでは、onDrawのキャンバスのサイズはエミュレーター画面のサイズであり、480x800です。

@Override
protected void onDraw(Canvas canvas) {
    int w = canvas.getWidth();
    int h = canvas.getHeight();
    Log.i(TAG, "  onDraw, w: " + w + ", h: " + h);
}

このキャンバスを描画ルーチンに渡すことができるように、キャンバスのサイズを250x250にします。現在、私の描画ルーチンは、LinearLayoutによって定義された250x250ビットマップの外側に描画しています。

キャンバスを変換することで、キャンバスの描画ルーチンを機能させることができることに気付きましたが、元のキャンバスを新しいキャンバスで一時的に上書きできれば、よりクリーンになります。

次の方法で自分のキャンバスを定義できることを理解しています。

Bitmap b = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);

Viewクラスによって作成されたキャンバスを新しいキャンバスに置き換えるにはどうすればよいですか?どんな助けでも大歓迎です。

チャールズ

4

2 に答える 2

1

Canvas を置き換えないでください。代わりにクリップ rect を使用してください。

于 2010-03-10T21:41:33.483 に答える
1

キャンバスではなく、ビューの幅と高さを使用する必要があります。どちらも getWidth() と getHeight() で取得できます。次に、これらの寸法を描画ルーチンに渡します。

于 2010-03-10T20:52:02.740 に答える