canvas.drawCircle不起作用 - 当drawLine工作时 - 可能是由使用Sherlock引起的?

时间:2012-10-24 20:16:40

标签: android drawing actionbarsherlock android-canvas

我对标准方法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适用于所有三种设备!

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

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

所以我想这可能与Sherlock有关 - 但是,我不知道如何以及为什么 - 如果有的话......

任何人都有drawLine工作的类似经历但drawCircledrawPath没有? - 使用或不使用Sherlock

非常感谢

4 个答案:

答案 0 :(得分:1)

几乎令人难以置信但却是真实的,只需更改目标设置(或完全删除它)就可以了 - 它在我的情况下也是如此: - )

答案 1 :(得分:1)

我有完全相同的问题 - Canvas.drawCircle不适合我。 Luckely,还有另一个功能 - 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);

答案 2 :(得分: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);
}

然而,当我将调用View.invalidate()放入我的onTouchEvent()方法时,它开始工作,因为我想画一个触摸屏幕的矩形。

@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

得到了这个

答案 3 :(得分:0)

我将最小的Android版本从2.3更改为3后出现了同样的问题。如果我将Android版本更改回所有工作,则行工作但不是drawRect。 经过大量尝试和错误后,我发现切换顶部和按钮坐标就可以了。

我将订单从左上角右下角改为左下角-rirht-top并且有效。