我对标准方法canvas.drawCircle
有一个奇怪的问题。
虽然我在使用Android 4.0.4的三星Galaxy S3上运行完全相同的代码,而在使用2.1的另一个S2上运行完全相同的代码,但它可以正常运行。使用4.0.3的Acer 500平板电脑上的相同代码在调用drawCircle
和drawPath
时不会绘制任何内容。
这是代码:
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
工作的类似经历但drawCircle
和drawPath
没有?
- 使用或不使用Sherlock
非常感谢
答案 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并且有效。