3

我对标准方法有一个奇怪的问题canvas.drawCircle

虽然我在具有 Android 4.0.4 的三星 Galaxy S3 和具有 2.1 的另一台 S2 上运行完全相同的代码,但它可以正常工作。使用 4.0.3 的 Acer 500 平板电脑上的相同代码在调用drawCircledrawPath.

这是代码:

    Paint thickLine = new Paint(scalePaint);
    thickLine.setStrokeWidth(0.07f);
    thickLine.setColor(Color.argb(0xff, 0xff, 0x36, 0x33));
    thickLine.setFlags(Paint.ANTI_ALIAS_FLAG);
    canvas.drawLine(0.5f, 0.5f, 0.1f, 0.1f, thickLine);
    canvas.drawCircle(0.5f, 0.5f, 0.15f, thickLine);

drawLine适用于所有三种设备!

还要提一下 - 代码之前工作过 - 然后我将标准 Fragments 更改为 SherlockFragments 并在应用程序中的几个地方修改了代码 - 总是在 S3 上进行测试。所以我不知道它从什么阶段开始在宏基上不再起作用。

我还使用了包含此代码的未更改的旧绘图类(在我对应用程序进行所有更改之前)并将其复制到现在使用 Sherlock 的新版本中 - 即使项目代码的这个阶段不再像描述的那样工作。

所以我想这可能与夏洛克有关——但是,我不知道如何以及为什么——如果有的话……

任何人都有类似的经验,但在哪里可以工作drawLine但不可以?- 使用或不使用 SherlockdrawCircledrawPath

非常感谢

4

4 回答 4

1

我遇到了完全相同的问题 - Canvas.drawCircle 不适合我。幸运的是,还有另一个函数 - Canvas.drawOval。您可以使用它来绘制圆圈而无需更改构建目标。

RectF tmpRect = new RectF();
tmpRect.top = 0;
tmpRect.bottom = diameter;
tmpRect.left = 0;
tmpRect.right = diameter;

//This call will draw nothing
canvas.drawCircle(tmpRect.centerX(), tmpRect.centerY(), tmpRect.width() / 2, selectionPaint);
//This call will draw a circle
canvas.drawOval(tmpRect, selectionPaint);
于 2013-01-14T14:02:06.517 回答
0

几乎令人难以置信但确实如此,只需更改目标设置(或将其全部删除),它就会起作用 - 在我的情况下它确实如此:-)

于 2012-11-29T17:59:29.527 回答
0

我只是遇到了 Canvas.drawLine() 和 Canvas.drawRect() 的问题。我的线条会被绘制,但我的矩形没有。

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.WHITE);

    int height = canvas.getHeight();
    int width = canvas.getWidth();

    canvas.drawLine(width/2,0,width/2,height,paint);
    canvas.drawLine(0,height/2,width,height/2,paint);

    paint.setStyle(Paint.Style.STROKE);
    paint.setColor(Color.GREEN);
    canvas.drawRect(touchRect, paint);
}

但是,当我在 onTouchEvent() 方法中调用 View.invalidate() 时,它开始起作用,因为我想在触摸屏幕的地方绘制一个矩形。

@Override
public boolean onTouchEvent(MotionEvent event) {

    invalidate();

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        float x = event.getX();
        float y = event.getY();

        touchRect.left = (int) (x - 20);
        touchRect.top =(int) (y - 20);
        touchRect.right = (int) (x + 20);
        touchRect.bottom = (int) (y + 20);
    }
    return false;
}

我从阅读https://developer.android.com/guide/topics/graphics/2d-graphics.html得到这个

于 2013-04-01T08:33:38.467 回答
0

将最低 Android 版本从 2.3 更改为 3 后,我遇到了同样的问题。如果我将 android 版本改回来,线条可以正常工作,但 drawRect 不能正常工作。经过多次尝试和错误,我发现切换顶部和底部坐标可以解决问题。

我将顺序从左上右下更改为左下右上,它起作用了。

于 2014-01-31T20:55:04.420 回答