2011-06-30 50 views
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); 
} 

にテキストを変換することになったが、OK、このコードですか?はいの場合、この新しいビットマップを画面に表示させるにはどうすればよいですか?私は、コードで使用できるXMLでそのような要素が存在しないように、私は要素Canvasと混乱していますエラーを

setContentView(c); //<- ERROR! 

を製造し、このコードを試してみました。

答えて

3

setContentView(View)は、Viewをとり、Canvasは、Viewではありません。

あなた自身でCanvasを作成することは確実ではありません。あなたがAndroidフレームワークからあなたに渡されるCanvasを得る方法があります。これを行う方法の1つは、カスタムViewを作成することです。これを行うには、Viewを拡張する新しいクラスを作成する必要があります。

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

This linkは、独自のカスタムビューを作成するために必要なものの概要を示します。

2

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

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

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

+0

あなたの投稿も非常に参考になりましたが、nicholas氏はもっと多くのポイントを指摘してくれました。もう一度もう一度ありがとう。 – sandalone

関連する問題