角度計をスマホアプリ内で作図してみました。
抜粋
RectF oval = new RectF(2, 2, 510, 510);
paint.setColor(Color.argb(75, 255, 255, 255));
paint.setStyle(Paint.Style.FILL);
canvas0.drawArc(oval, 0, 360, true, paint);
paint.setStrokeWidth(4);
paint.setColor(Color.argb(255, 0, 0, 0));
paint.setStyle(Paint.Style.STROKE);
canvas0.drawArc(oval, 0, 360, true, paint);
int nm = 0,mn = 0;
for (int i = 0; i < 360; i++) {
paint.setColor(Color.argb(255, 0, 0, 0));
paint.setStrokeWidth(1);
nm = i % 10;
mn = i % 45;
if(nm == 0){paint.setStrokeWidth(3);nm = 20;paint.setColor(Color.argb(255, 255, 0, 0));}
else if(nm == 5){paint.setStrokeWidth(2);nm = 15;paint.setColor(Color.argb(255, 0, 153, 255));}
if(mn == 0){nm = 30;paint.setStrokeWidth(4);}
canvas0.drawLine(256, 0, 256, nm + 10, paint);
if(mn == 0){paint.setColor(Color.argb(255, 0, 0, 0));
// 中心座標
float centerX = 256;
float centerY = 70;
// 描画する文字列
int txti = i;
if(i > 180){txti = 360 - i;}
String text = "" + txti;
// テキスト用ペイントの生成
Paint textPaint = new Paint( Paint.ANTI_ALIAS_FLAG);
textPaint.setTextSize(50);
textPaint.setColor( Color.BLACK);
FontMetrics fontMetrics = textPaint.getFontMetrics();
// 文字列の幅を取得
float textWidth = textPaint.measureText( text);
// 中心にしたいX座標から文字列の幅の半分を引く
float baseX = centerX - textWidth / 2;
// 中心にしたいY座標からAscentとDescentの半分を引く
float baseY = centerY - (fontMetrics.ascent + fontMetrics.descent) / 2;
// テキストの描画
canvas0.drawText( text, baseX, baseY, textPaint);
}
matrixa.setRotate(1, 256, 256);
canvas0.concat(matrixa);
で
こんな感じになりました。
0コメント