プロジェクトには、実行時に動的に円を描くという要件があります。そのため、ShapeDrawableを使用してプログラムで円を作成していますが、残念ながら、CircleShapeのShapeDrawable内にクラスやメソッドが見つかりませんでした。代わりに、OvalShape()
しか見つかりませんでした。円の直径または半径を渡すだけで、ShapeDrawableを介して円を描くのを手伝ってください。前もって感謝します。どんな種類のカスタマイズでも、ソリューションを修正するのに役立ちます。
ShapeDrawableに使用しているコードは
public static ShapeDrawable drawCircle (Context context, int width, int height, int color) {
//////Drawing oval & Circle programmatically /////////////
ShapeDrawable oval = new ShapeDrawable (new OvalShape ());
oval.setIntrinsicHeight (height);
oval.setIntrinsicWidth (width);
oval.getPaint ().setColor (color);
return oval;
}
MainActivity.Java
で使用するコード
if(Build.VERSION.SDK_INT >= 16) {
txtCount.setBackground (Util.drawCircle (MainActivity.this, 50, 50, getResources ().getColor (R.color.yellow)));
txtHotelCount.setText ("20");
}else{
txtCount.setBackgroundDrawable (Util.drawCircle (MainActivity.this, 50, 50, getResources ().getColor (R.color.yellow)));
txtHotelCount.setText ("20");
}
xml using for TextViewtxtCount
in my project for is
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:padding="10dp"
Android:background="@color/white">
<TextView
Android:id="@+id/txt_count"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textColor="@color/text_grey"
Android:gravity="center"
Android:textSize="12sp"
Android:padding="2dp"
/>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:textColor="@color/text_grey"
Android:text="AVAILABLE"
Android:layout_marginLeft="10dp"
Android:gravity="center"
/>
</LinearLayout>
しかし、50と同じ幅と高さを設定した後でも、まだ運がありません。プロパティはまだ楕円形のように動作しています。
TextView
に同じ高さと幅を与えます
<TextView
Android:id="@+id/txt_count"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:textColor="@color/text_grey"
Android:gravity="center"
Android:textSize="12sp"
Android:padding="2dp"
/>
これは答えるには遅すぎますが、それが他の誰かを助けることを願っています。このように円を描きたい場合は、テキストビューのみなので46.0%は気にしないでください。
public class Circle extends View {
private Paint mCircleYellow;
private Paint mCircleGray;
private float mRadius;
private RectF mArcBounds = new RectF();
public Circle(Context context) {
super(context);
// create the Paint and set its color
}
public Circle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initPaints();
}
public Circle(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
private void initPaints() {
mCircleYellow = new Paint(Paint.ANTI_ALIAS_FLAG);
mCircleYellow.setStyle(Paint.Style.FILL);
mCircleYellow.setColor(Color.YELLOW);
mCircleYellow.setStyle(Paint.Style.STROKE);
mCircleYellow.setStrokeWidth(15 * getResources().getDisplayMetrics().density);
mCircleYellow.setStrokeCap(Paint.Cap.SQUARE);
// mEyeAndMouthPaint.setColor(getResources().getColor(R.color.colorAccent));
mCircleYellow.setColor(Color.parseColor("#F9A61A"));
mCircleGray = new Paint(Paint.ANTI_ALIAS_FLAG);
mCircleGray.setStyle(Paint.Style.FILL);
mCircleGray.setColor(Color.GRAY);
mCircleGray.setStyle(Paint.Style.STROKE);
mCircleGray.setStrokeWidth(15 * getResources().getDisplayMetrics().density);
mCircleGray.setStrokeCap(Paint.Cap.SQUARE);
// mEyeAndMouthPaint.setColor(getResources().getColor(R.color.colorAccent));
mCircleGray.setColor(Color.parseColor("#76787a"));
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mRadius = Math.min(w, h) / 2f;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int w = MeasureSpec.getSize(widthMeasureSpec);
int h = MeasureSpec.getSize(heightMeasureSpec);
int size = Math.min(w, h);
setMeasuredDimension(size, size);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Float drawUpto = 46f;
float mouthInset = mRadius / 3f;
mArcBounds.set(mouthInset, mouthInset, mRadius * 2 - mouthInset, mRadius * 2 - mouthInset);
canvas.drawArc(mArcBounds, 0f, 360f, false, mCircleGray);
canvas.drawArc(mArcBounds, 270f, drawUpto, false, mCircleYellow);
}
}
したがって、このクラスはビュークラスであるため、xmlファイルで使用してください。