奇怪的!在绘制屏幕边界时绘制致命信号11

时间:2014-02-12 13:52:50

标签: android crash drawing samsung-mobile android-4.3-jelly-bean

我得到了

Fatal signal 11 (SIGSEGV) code=1 

每当我绘制一个穿过屏幕边界的填充多边形时。这发生在三星Note 10.1的OS 4.3上。什么可能导致这个?我假设操作系统应该能够剪辑多边形。

违规代码:

public SplashStarShape(Context context, int x, int y, int size) {

    super(context);
    paint = new Paint();
    star = new Path();
    star.setFillType(Path.FillType.WINDING);
    paint.setAntiAlias(true);
    paint.setStrokeWidth(DS.scale(10));
    paint.setColor(EslColors.WHITE);
    int k = 0;

    for (int i = 0; i < 360; i += 36) {

        int radius = ((k % 2) == 0) ? size * 2 : size - DS.scale(30);
        k ++;

        float px = (float)x + (float) (Math.cos(0.6 + (float)i * 3.1415926f * 2.0f / (float)360.0f) * (float)(radius/2.0f));
        float py = (float)y + (float) (Math.sin(0.6 + (float)i * 3.1415926f * 2.0f / (float)360.0f) * (float)(radius/2.0f));

        if (i == 0) {
            star.moveTo(px, py);
        } else {
            star.lineTo(px, py);
        }
    }

    star.close();
    this.invalidate();

}

@Override
protected void onDraw (Canvas canvas) {

    super.onDraw(canvas);
    canvas.drawPath(star, paint);

}

如果我缩小半径以使星星适合屏幕,则不会发生崩溃。如果触手伸到屏幕外,我会收到致命的错误。很奇怪!

0 个答案:

没有答案