2

このコードは、テキストを画像に変換することになっています

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.RED);
        paint.setTextSize(16);
        paint.setAntiAlias(true);
        paint.setTypeface(Typeface.MONOSPACE);

        Bitmap bm = Bitmap.createBitmap(16, 16, Bitmap.Config.ALPHA_8);
        float x = bm.getWidth();
        float y = bm.getHeight();
        Canvas c = new Canvas(bm);
        c.drawText("Test", x, y, paint);
}

このコードは大丈夫ですか?はいの場合、この新しいビットマップを画面に表示するにはどうすればよいですか?エラーが発生したこのコードを試しました

setContentView(c); //<- ERROR!

Canvasコードで使用できるような要素がXMLにないため、要素と混同しています。

4

2 に答える 2

3

setContentView(View)を取り、ViewCanvasではありませんView

自分で作成したいかどうかはわかりませんCanvasCanvasただし、Androidフレームワークからパスを取得する方法はいくつかあります。これを行う1つの方法は、カスタムを作成することですView。これを行うには、を拡張する新しいクラスを作成する必要がありますView

Viewクラスをオーバーライドする場合、メソッドをオーバーライドすることができますonDraw(Canvas)onCreate()これはおそらく、投稿したコードのメソッドで実行しようとしていることを実行したい場所です。

このリンクは、独自のカスタムビューを作成するために必要なものの概要を示しています。

于 2011-06-30T21:41:22.617 に答える
2

最初に:指定したxとyの位置にテキストを描画する場合は、そのピクセルから始めて、右下隅にテキストを描画します。キャンバスには何も描画されません。テスト描画と同じ高さのbm.getWidth()/2を試してください。後で最適化できます。

2番目:Canvasはビューではありません(Viewクラスを拡張しません)。ビューを設定するには、set ContentView()を使用する必要があります。ここで私がお勧めするのは、単一のImageViewのみを含むXMLレイアウトを作成し、それをsetContentView(R.layout.mylayout)を介して設定することです。

その後、findViewById()を使用してそのImageViewを取得し、ImageView.setImageBitmap(bm)を使用してその上にビットマップを表示できます。ビットマップを使用して作成した後は、キャンバスに対して何もする必要はありません。その時点からキャンバス内に描画したものはすべて、ビットマップにすぐに表示されます。したがって、XMLでCanvasを指定することはできません。これは、実際のUI要素ではなく、いわば画像を編集するための単なる「エディター」です。

于 2011-06-30T21:41:54.770 に答える