Activity_main.xml に View から拡張されたクラスを配置し、その周りにボーダーを描画したいと考えています。そのため、座標を配列に格納し、以下に示すように線描画関数を呼び出します。
private void initView(Context ctx) {
if(!initialized) {
initialized = true;
linePaint.setColor(Color.GREEN);
// linePaint.setStrokeWidth(2.0f);
}
}
@Override
public void onDraw(Canvas canvas) {
if(cachedBitmap == null) {
// cachedBitmap = Bitmap.createBitmap(getWidth(), getHeight(), Config.ARGB_8888);
cachedBitmap = Bitmap.createBitmap(getWidth(), 200, Config.ARGB_8888);
// cachedBitmap.setHasAlpha(false);
// cachedBitmap.eraseColor(Color.WHITE);
cachedCanvas = new Canvas(cachedBitmap);
}
COORDS[0][0] = 0.0f; // Left-Top
COORDS[0][1] = 0.0f;
COORDS[1][0] = 0.0f; // Left-Bottom
COORDS[1][2] = getHeight();
COORDS[2][0] = getWidth(); // Right-Bottom
COORDS[2][3] = getHeight();
Log.d("MYLOG", "(2,0)="+Float.toString(COORDS[2][0])+" "+"(2,1)="+Float.toString(COORDS[2][4]) );
COORDS[3][0] = getWidth(); // Right-Top
COORDS[3][5] = 0.0f;
///*
// drawLine(COORDS[0][0], COORDS[0][6], COORDS[1][0], COORDS[1][7], linePaint);
// drawLine(COORDS[0][0]+5.0f, COORDS[0][8]+5.0f, COORDS[1][0]+5.0f, COORDS[1][9]+5.0f, linePaint);
canvas.drawLine(COORDS[0][0], COORDS[0][10], COORDS[1][0], COORDS[1][11], linePaint);
cachedCanvas.drawLine(COORDS[0][0], COORDS[0][12], COORDS[1][0], COORDS[1][13], linePaint);
// */
/*
canvas.drawLine(0.0f, 0.0f, 100.0f, 0.0f, linePaint);
cachedCanvas.drawLine(0.0f, 0.0f, 100.0f, 100.0f, linePaint);
// */
canvas.drawLine(COORDS[1][0], COORDS[1][14], COORDS[2][0], COORDS[2][15], linePaint);
cachedCanvas.drawLine(COORDS[1][0], COORDS[1][16], COORDS[2][0], COORDS[2][17], linePaint);
canvas.drawLine(COORDS[2][0], COORDS[2][18], COORDS[3][0], COORDS[3][19], linePaint);
cachedCanvas.drawLine(COORDS[2][0], COORDS[2][20], COORDS[3][0], COORDS[3][21], linePaint);
canvas.drawLine(COORDS[3][0], COORDS[3][22], COORDS[0][0], COORDS[0][23], linePaint);
cachedCanvas.drawLine(COORDS[3][0], COORDS[3][24], COORDS[0][0], COORDS[0][25], linePaint);
canvas.drawBitmap(cachedBitmap, 0.0f, 0.0f, null); // Set position of bitmap within the canvas
}
これにより、次の出力が得られます
getWidth() と getHeight() が正しい値を返しているにもかかわらず。
とにかく、出力をより明確にするために線を少し太くすることを考えたので// linePaint.setStrokeWidth(2.0f);
、上記のコードの行のコメントを外しましたが、出力は次のようになります。
- なぜこのように振る舞うのですか?
- 線の太さを変更するにはどうすればよいですか?
- _編集 - -
これは、ビューが activity_main で宣言される方法です。
<com.example.mybasicinteractivegraph.GraphBoarder
android:layout_width="100dp"
android:layout_height="100dp"
android:text="@string/hello_world" />
---EDIT 2---
とandroid:layout_width = "wrap_content"