gpt4 book ai didi

android - 使用 Android ShapeDrawable 以编程方式绘制圆

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:15 27 4
gpt4 key购买 nike

我的项目要求在运行时动态绘制一个圆圈。因此,为此我使用 ShapeDrawable 以编程方式创建圆,但不幸的是,我在 ShapeDrawable 中找不到用于 CircleShape 的任何类或方法,而我只找到了 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");

}

在我的项目中使用 TextView txtCount 的 xml 是

<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 后仍然没有运气。该属性的行为仍然像椭圆形。

最佳答案

现在回答为时已晚,但希望它能帮助其他人。如果想像这样画圆圈,不要为 46.0% 而烦恼,因为它只是 TextView 。

enter image description here .

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 文件中使用这个类,因为它是一个 View 类。

关于android - 使用 Android ShapeDrawable 以编程方式绘制圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31563657/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com