11

Canvasを介して描画しているビットマップに「グラフ用紙」の外観を作成し、これを行うための最良の方法を見つけようとしています。

.lockCanvas()呼び出しを介してSurfaceViewでCanvasを取得しているため、グラフ用紙の背景を含むソースビットマップをCanvasコンストラクターに渡すことができません。

私が試したいくつかの解決策:

  • このソリューションをSurfaceViewのThread.run()に実装しようとしましたが、BitmapDrawableがビットマップに変換されるとタイリングプロパティが失われると思われる問題があります。

    キャンバス=mSurfaceHolder.lockCanvas(null); BitmapDrawable TileMe = new BitmapDrawable(BitmapFactory.decodeResource(getResources()、R.drawable.editor_graph)); TileMe.setTileModeX(Shader.TileMode.REPEAT); TileMe.setTileModeY(Shader.TileMode.REPEAT);

    ビットマップb=TileMe.getBitmap(); canvas.drawBitmap(b、0、0、null);

  • 宛先のRectFをパラメーターとして受け取るCanvas.drawBitmapメソッドを使用すると、ビットマップはRectFを埋めるために並べて表示されるように見えます...しかし、ビュー領域全体を埋めるRectFを確実に宣言するにはどうすればよいですか?

  • ビットマップ/キャンバスのレイアウトが不透明で表示されないようにするため、アクティビティの背景を目的のグラフ用紙の外観に設定することもできません。

これを達成する方法はありますか?

4

2 に答える 2

27

2つの簡単な解決策があります。

  • BitmapDrawableを使用しますが、ビットマップを抽出する代わりに、BitmapDrawable.draw(Canvas)を呼び出すだけです。描画領域を埋めるために、描画可能な境界を設定することを忘れないでください。
  • BitmapShaderを使用してペイントを作成し、それを使用して長方形を描画します(これは基本的にBitmapDrawableが行うことです)。
于 2011-01-29T20:18:59.363 に答える
-3

を使用してタイル効果を得る方法があると確信していSurfaceViewます。BitmapDrawable残念ながら、キャンバスでは使用できないようです。Rectしたがって、に独自の一連のを作成Canvasし、それぞれにスケーリングされたビットマップを描画することによって、独自のカスタムタイリングメソッドを実装する必要があります。

正直なところ、それほど難しいことではありません。ビューの幅/高さを取得し、Rect描画先のこのデータに基づいての配列を作成するだけですBitmap

または、実際のタイルの背景をその場で変更する必要がない場合は、背景として描画し、そのSurfaceView上に描画します。あなたがリンクしたその投稿はBitmapDrawable、あなたが実装できるタイリングへの複数の解決策を提供しました。

于 2011-01-29T19:56:21.070 に答える