标签: android-canvas

使用canvas.drawText在文本中换行符

我正在做一个 Android 游戏,我正在使用这样的函数在设备屏幕上显示文本:

public void drawString(String text, int x, int y, Paint paint) {
    canvas.drawText(text, x, y, paint);

}
Run Code Online (Sandbox Code Playgroud)

我尝试显示以下消息:

g.drawString("Player: " + playerString+ " :\n" + messageString,SCREENWIDTH / 2, SCREENHEIGHT / 2, paint);
Run Code Online (Sandbox Code Playgroud)

然而,我得到的是一个奇怪的字符(一个正方形),而不是换行符(\n)。

有人可以帮助我吗?

谢谢

java android newline drawtext android-canvas

3
推荐指数
2
解决办法
1万
查看次数

如何区分android中的手指和手写笔触摸

我正在该特定活动中开发绘图类型的应用程序,我想禁用触摸事件,而我只想启用触控笔事件。android 中是否有任何默认 API 来区分两个事件?

java android android-canvas

3
推荐指数
1
解决办法
1150
查看次数

Android三角形自定义按钮

我想在这个问题中制作2个对角三角形按钮.

我怎样才能做到这一点?我应该制作一个带有矩形的可绘制xml并以某种方式旋转它吗?我是否应该在数学的帮助下制作图像并使其仅在三角形部分上可点击?

android button android-custom-view android-canvas

3
推荐指数
1
解决办法
878
查看次数

如何在android中使用sin()函数和canvas绘制正弦波曲线?

我是 android 新手,我试图在加速度计值变化的触发器上在屏幕上绘制正弦波。我只需要在屏幕上动态绘制的纯正弦波(仅限于屏幕)。我可以在 Canvas 上绘制坐标并验证屏幕尺寸,但我无法想到如何将正弦值(范围从 0 到 1)转换为屏幕坐标。

我在 onSensorChanged() 中尝试这样的事情:

tvarY = sin(tvarX)*2.0;  // tvarX and tvarY are double values
tvarX= (tvarX+ 2);        // 2.0 is for magnifying

xPosition = (float)tvarX;
yPosition = (float)tvarY;
Run Code Online (Sandbox Code Playgroud)

但是使用这种方法的 tvarx 值总是从无穷大到 0 来回切换。有人可以建议我任何方法来更改这些值并将它们转换为屏幕坐标以绘制正确的正弦波吗?

谢谢 :-)

android trigonometry android-canvas

3
推荐指数
2
解决办法
5979
查看次数

两点之间的画布中的Android路径addArc

我正在尝试在 android 中绘制一条弧线。在IOS中,用这个方法真的很容易做到

[path addArcWithCenter: radius: startAngle: endAngle: clockwise:]
Run Code Online (Sandbox Code Playgroud)

在 android 中,我有 3 个点(我的圆心,以及我想在它们之间画一条弧线的两个点):

Point center = new Point(..., ...);
Point p1 = new Point(..., ...);
Point p2 = new Point(..., ...);

int radius = (int) Math.sqrt(Math.pow(p1.x - center.x, 2) + Math.pow(p1.y - center.y, 2));
Run Code Online (Sandbox Code Playgroud)

但是如何使用 Path.addArc 方法在 p1 和 p2 之间绘制弧线?我已经尝试过(如何在画布上的两点之间绘制圆弧?):

RectF oval = new RectF();
oval.set(p2.x - radius, p2.y - radius, p2.x + radius, p2.y + radius);
path.addArc(oval, startAngle, endAngle - startAngle);
// startAngle : angle …
Run Code Online (Sandbox Code Playgroud)

android path ondraw android-canvas

3
推荐指数
1
解决办法
3762
查看次数

RTL 支持自定义编辑文本以绘制左侧

我有一个edittext,其中一个图像可绘制,左侧带有不可编辑的前缀editext,但现在我想让它支持rtl。尽管我付出了努力,但我还是无法支持 rtl。

我的自定义类如下,

public class PrefixedEditText extends TextInputEditText {

private String mPrefix = "+"; // can be hardcoded for demo purposes
private Rect mPrefixRect = new Rect(); // actual prefix size

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

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    getPaint().getTextBounds(mPrefix, 0, mPrefix.length(), mPrefixRect);
    mPrefixRect.right += getPaint().measureText(" "); // add some offset

    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawText(mPrefix, super.getCompoundPaddingLeft(), getBaseline(), getPaint());
}

@Override
public int getCompoundPaddingLeft() { …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view right-to-left android-edittext android-canvas

3
推荐指数
1
解决办法
2479
查看次数

在画布上撤消和重做

我正在开发绘图应用程序,用户可以在其中绘制矩形、圆形等形状。用户还可以徒手绘图(钢笔)。

我想添加撤消、重做功能。我已经搜索并阅读了大部分关于撤消和重做的答案,但所有内容都与路径相关。意味着他们正在管理两个列表,一个用于绘制路径列表,第二个用于撤消路径列表。这是一种很好的工作方式,但只有在手绘图或者我使用路径时才有效。

这里我为不同的形状调用不同类型的画布方法。

帮助我在画布绘图上提供撤消重做。

这是我的代码

public class DrawingView extends android.support.v7.widget.AppCompatImageView {
    public static final int RECTANGLE = 1;
    public static final int SQUARE = 2;
    public static final int CIRCLE = 3;
    public 

static final int LINE = 4;
    public static final int SMOOTH_LINE = 5;
    public static final int TRIANGLE = 6;
    public static final int IMPORT_IMAGE = 7;
    public static final int ERASER = 8;

private static final float TOUCH_TOLERANCE = 5;

private int color;
private int currentShape; …
Run Code Online (Sandbox Code Playgroud)

android drawing android-canvas android-paint

3
推荐指数
1
解决办法
1815
查看次数

将字母间距设置为drawTextOnPath

我正在使用以下代码来制作旋转轮。

@Override
    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        for (int i = 0; i < segmentColors.length; i ++)
        {
            drawDataSet(canvas, i);
        }

        canvas.drawCircle(getWidth()/2, getHeight()/2, getWidth() - getWidth()/2 - dpToPx(5), mTransparentCirclePaint);
    }


protected void drawDataSet(Canvas canvas, int position)
    {
        int color = segmentColors[position];
        float mainArcAngle = ((float) 360/ (float)segmentColors.length);

        Paint paint = new Paint();
        paint.setStyle(Paint.Style.FILL);

        if ( position%2 == 0)
            paint.setColor(color);
        else
            paint.setColor(Color.parseColor("#009f2f"));

        RectF rect = new RectF(0, 0, getWidth(), getWidth());
        canvas.drawArc(rect, (mainArcAngle * position), mainArcAngle, true, paint);

        TextPaint mTextPaint = …
Run Code Online (Sandbox Code Playgroud)

android android-custom-view android-canvas android-paint

3
推荐指数
1
解决办法
3055
查看次数

在画布上绘制圆形形状(Android)

这是我用来在画布上绘制圆形形状(然后在其上绘制图标位图)的内容:

private static Bitmap makeIcon(int radius, int color, Bitmap icon) {
    final Bitmap output = Bitmap.createBitmap(radius, radius, Bitmap.Config.ARGB_8888);
    final Canvas canvas = new Canvas(output);
    final Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setColor(color);
    canvas.drawARGB(0, 0, 0, 0);
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT)
        canvas.drawCircle(radius / 2, radius / 2, radius / 2, paint);
    else
        canvas.drawRect(0, 0, radius, radius, paint);
    int cx = (radius - icon.getWidth()) >> 1; // same as (...) / 2
    int cy = (radius - icon.getHeight()) >> 1;
    canvas.drawBitmap(icon, cx, …
Run Code Online (Sandbox Code Playgroud)

android drawing shape android-canvas

3
推荐指数
1
解决办法
914
查看次数

如何使画布上的圆弧居中 - Jetpack Compose?

我不确定如何进行计算以使该弧在画布上居中?有人能指出我正确的方向吗?

Canvas(modifier = Modifier
    .background(Color.LightGray)
    .fillMaxWidth()
    .height(300.dp)
) {
        drawArc(
            color = Color.Blue,
            startAngle = 30f,
            sweepAngle = 300f,
            useCenter = false,
            style = Stroke(width = 50f, cap = StrokeCap.Round),
            size = size/2.25F
        )
}
Run Code Online (Sandbox Code Playgroud)

android android-canvas kotlin android-jetpack-compose android-jetpack-compose-canvas

3
推荐指数
1
解决办法
2367
查看次数