Dar*_*ova 8 android android-6.0-marshmallow
在我的应用程序中,我需要使用位图和drawCircle()方法绘制圆圈.
一切都很好,完全符合Android 6.0的要求.
它仍然在所有以前的版本上绘制圆圈,但是当我在6.0上使用应用程序时绘制矩形.但是,如果我将其更改为填充,它会在api 22和api 23中绘制一个圆圈. 任何人都有同样的问题或任何想法为什么会发生这种情况?
这是源代码和屏幕截图(左侧API 23上运行的应用程序,右侧是API 22).在不同的api上使用相同的应用程序
public final class Circle1View extends View {
private float xCenter, yCenter;
private Bitmap grid = null;
public Circle1View (Context context) {
super(context);
init();
}
private void init() {
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
@Override
protected void onDraw(Canvas canvas) {
int w = getWidth();
int h = getHeight();
xCenter = w / 2;
yCenter = h / 2;
drawBitmaps(w, h);
canvas.translate(xCenter, yCenter);
canvas.scale(xCenter, yCenter);
canvas.drawBitmap(grid, null, new RectF(-1, -1, 1, 1), null);
}
private void drawBitmaps(int w, int h) {
grid = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas();
canvas.translate(xCenter, yCenter);
canvas.scale(xCenter, yCenter);
Paint gridPaint = new Paint();
gridPaint.setStrokeWidth(0.01f);
// Works with FILL
// gridPaint.setStyle(Paint.Style.FILL);
gridPaint.setStyle(Paint.Style.STROKE);
canvas.setBitmap(grid);
canvas.drawCircle(0, 0, 0.5f, gridPaint);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这与你所做的缩放和翻译有关。想象一下,绘制的圆非常小,只需要 4 个像素。当将其放大回完整尺寸时,这些像素之间会留下 4 条直线。
当我将描边宽度更改为 0.04f 时,问题就消失了。我建议您通过Canvas直接利用提供的内容来简化代码:
@Override
protected void onDraw(Canvas canvas) {
int w = getWidth();
int h = getHeight();
xCenter = w / 2;
yCenter = h / 2;
Paint gridPaint = new Paint();
gridPaint.setStrokeWidth(1f);
gridPaint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(xCenter, yCenter, w/4, gridPaint);
}
Run Code Online (Sandbox Code Playgroud)
至于你关于 API 级别之间差异的问题:Marshmallow 引入了drawBitmap(). 您可以查看Lollipop和Marshmallow各自的源代码。
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |