半静的(まれに変化する)ビットマップを作成する非表示のアイコンを受け入れるカスタムビュー(表示)を作成しました。そのアイデアは、そのキャンバスに印刷するためにいくつかのアイコンをディスプレイに渡すことです。私の問題は、ディスプレイを実際にアイコンのビットマップをキャンバスに描画することができないことです。小さなビットマップを大きなキャンバスに描画できないのはなぜですか?
以下のコードは、私の持つ実例です。 、このコードは右を下げ、0からは50pxの直径の円を描くように左上からラインをプリントアウトする必要があります
public class AndroidTestoActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout fl = new FrameLayout(this);
Display tv = new Display(this);
tv.setLayoutParams(new LayoutParams(200, 200));
fl.addView(tv);
setContentView(fl);
}
public class Display extends View {
Paint vPaint = new Paint();
Icon item = new Icon();
public Display(Context context) {
super(context);
vPaint.setStyle(Paint.Style.FILL_AND_STROKE);
vPaint.setColor(0x0ff000000);
setBackgroundColor(0xffffffff);
}
@Override public void onDraw(Canvas canvas) {
canvas.scale(200, 200);
item.onDraw(canvas);
canvas.drawLine(0.0f, 0.0f, 1.0f, 1.0f, vPaint);
}
}
public class Icon {
Bitmap myImage;
Paint mPaint = new Paint();
public Icon() {
myImage = Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
mPaint.setStyle(Style.FILL);
mPaint.setColor(0xffff0000);
Canvas c = new Canvas(myImage);
c.scale(50, 50);
c.drawCircle(0.5f, 0.5f, 0.5f, mPaint);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(myImage, 0, 0, null);
}
}
}
(働くことによって私が意味する、それが私はそれが欲しいものを印刷していないことを、適切に実行されます) 0から50,50。代わりに、私が得るのはラインです。しかし、ビットマップをファイルに出力すると、ファイルは正確に出力されます。
何が起こっているかについての手掛かりはありますか?
EDIT
私の質問を明確にするために、私はDisplayViewよりも著しく小さいビットマップを作成しています。私がDisplayViewにビットマップを描画しようとすると、ビットマップは描画されず、適切にスケーリングされたものではありません。キャンバスがビットマップを正しく描画しないのはなぜですか?
UPDATE DiplayのonDrawメソッドで
、私はcanvas.scale(200, 200);
前にラインitems.onDraw(canvas);
を移動しました。今度はテストサークルが正しく描画されます。このような単純な変更は、透過的な方法で円を描くことを完全に無視するために何をしていますか?
'scale()'、 'translate()'、 'skew()'、その他のものについては(http://developer.android.com/reference/android/graphics/Canvas.html) "現在のマトリックス"は[変換マトリックス](http://en.wikipedia.org/wiki/Transformation_matrix)で動作します - あなたが望むものを得るために、それらを次々にやっていくのと同じくらい簡単です。 )。しかし、私は、この特定の例では、その行を動かすことで答えるのに十分な瞬間を覚えていません。 – Izkata