gpt4 book ai didi

java - 在 View 上画一个圆圈(android)

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

我第一次尝试编写 Android 应用程序。我想可视化 pi 的蒙特卡洛近似值。因此,我首先想在 View 上画一个圆圈,但我没有让它工作!我试图创建自己的“CircleView”类,它扩展了“View”并覆盖了 onDraw(..) 方法,就像它在此处解释的那样:How to draw circle by canvas in Android?

这是我的 CircleView 类

public class CircleView extends View {
public CircleView(Context context) {
super(context);
}

protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(150);
canvas.drawCircle(50,50,20,paint);
}
}

我已经使用以下 XML 代码将 CircleView 插入到 LinearLayout 中

<com.tak3r07.montecarlopi.CircleView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/circleView"
android:layout_weight="1"/>

(顺便说一句,Android Studio 在右侧的 XML View 中告诉我:“呈现问题自定义 View CircleView 未使用 2 或 3 参数 View 构造函数;XML 属性将不起作用”)

应用程序崩溃并显示以下日志:http://pastebin.com/Gv1GaHtX

谁能告诉我哪里做错了?

我认为此设置会创建一个带有显示圆圈的 View 的 Activity 。

问候

编辑:通过在 CircleView 中添加 2 和 3 参数构造函数来修复崩溃(参见 https://stackoverflow.com/a/13797457/3248708)

但是现在我在activity中还是没有看到任何Circle

最佳答案

一些观察:

在确定圆的中心点和半径时,您需要考虑分配给 View 的宽度和高度。

您应该考虑分配给您的 View 的填充,这样您就不会绘制保留部分。

您应该避免在 onDraw 方法中分配对象,因为它会被频繁调用。

为了允许在 XML 布局中指定您的 View ,您需要提供采用 Context 和 AttributeSet 的构造函数。 AttributeSet 是将 XML 属性传递给 View 的机制。

试一试:

package com.tak3r07.montecarlopi;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class CircleView extends View
{
private static final int DEFAULT_CIRCLE_COLOR = Color.RED;

private int circleColor = DEFAULT_CIRCLE_COLOR;
private Paint paint;

public CircleView(Context context)
{
super(context);
init(context, null);
}

public CircleView(Context context, AttributeSet attrs)
{
super(context, attrs);
init(context, attrs);
}

private void init(Context context, AttributeSet attrs)
{
paint = new Paint();
paint.setAntiAlias(true);
}

public void setCircleColor(int circleColor)
{
this.circleColor = circleColor;
invalidate();
}

public int getCircleColor()
{
return circleColor;
}

protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);

int w = getWidth();
int h = getHeight();

int pl = getPaddingLeft();
int pr = getPaddingRight();
int pt = getPaddingTop();
int pb = getPaddingBottom();

int usableWidth = w - (pl + pr);
int usableHeight = h - (pt + pb);

int radius = Math.min(usableWidth, usableHeight) / 2;
int cx = pl + (usableWidth / 2);
int cy = pt + (usableHeight / 2);

paint.setColor(circleColor);
canvas.drawCircle(cx, cy, radius, paint);
}
}

关于java - 在 View 上画一个圆圈(android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25961263/

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