NiceImageView icon indicating copy to clipboard operation
NiceImageView copied to clipboard

在Android9.0上运行demo 刚打开没问题,按home键之后 再进入全都显示方形图片了

Open niujiaqi opened this issue 6 years ago • 7 comments

在Android9.0上运行demo 刚打开没问题,按home键之后 再进入全都显示方形图片了 image

niujiaqi avatar Dec 20 '18 02:12 niujiaqi

加一行 srcPath.reset();就可以了 如果minSdkVersion>=19,直接使用第二种xfermode就可以

neugaojin avatar Dec 27 '18 12:12 neugaojin

srcPath.reset(); 没有这个方法啊 srcPath.reset();

Sincerly avatar Jan 22 '19 01:01 Sincerly

换个CircleImageView就好了 - -

Sincerly avatar Jan 22 '19 02:01 Sincerly

Android 9.0 显示有问题 有时候方形 有时候圆形

tankman1016 avatar Feb 16 '19 03:02 tankman1016

Android 9.0 显示有问题 有时候方形 有时候圆形

@Override protected void onDraw(Canvas canvas) { // 使用图形混合模式来显示指定区域的图片 canvas.saveLayer(srcRectF, null, Canvas.ALL_SAVE_FLAG); if (!isCoverSrc) { float sx = 1.0f * (width - 2 * borderWidth - 2 * innerBorderWidth) / width; float sy = 1.0f * (height - 2 * borderWidth - 2 * innerBorderWidth) / height; // 缩小画布,使图片内容不被border、padding覆盖 canvas.scale(sx, sy, width / 2.0f, height / 2.0f); } super.onDraw(canvas); paint.reset(); path.reset(); if (isCircle) { path.addCircle(width / 2.0f, height / 2.0f, radius, Path.Direction.CCW); } else { path.addRoundRect(srcRectF, srcRadii, Path.Direction.CCW); }

    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    paint.setXfermode(xfermode);
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {
        canvas.drawPath(path, paint);
    } else {
        srcPath.reset();
        srcPath.addRect(srcRectF, Path.Direction.CCW);
        // 计算tempPath和path的差集
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            srcPath.op(path, Path.Op.DIFFERENCE);
        }
        canvas.drawPath(srcPath, paint);
    }
    paint.setXfermode(null);

    // 绘制遮罩
    if (maskColor != 0) {
        paint.setColor(maskColor);
        canvas.drawPath(path, paint);
    }
    // 恢复画布
    canvas.restore();
    // 绘制边框
    drawBorders(canvas);
}

修改成这样就好了

niujiaqi avatar Feb 16 '19 03:02 niujiaqi

Android 9.0 显示有问题 有时候方形 有时候圆形

@override protected void onDraw(Canvas canvas) { // 使用图形混合模式来显示指定区域的图片 canvas.saveLayer(srcRectF, null, Canvas.ALL_SAVE_FLAG); if (!isCoverSrc) { float sx = 1.0f * (width - 2 * borderWidth - 2 * innerBorderWidth) / width; float sy = 1.0f * (height - 2 * borderWidth - 2 * innerBorderWidth) / height; // 缩小画布,使图片内容不被border、padding覆盖 canvas.scale(sx, sy, width / 2.0f, height / 2.0f); } super.onDraw(canvas); paint.reset(); path.reset(); if (isCircle) { path.addCircle(width / 2.0f, height / 2.0f, radius, Path.Direction.CCW); } else { path.addRoundRect(srcRectF, srcRadii, Path.Direction.CCW); }

    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.FILL);
    paint.setXfermode(xfermode);
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {
        canvas.drawPath(path, paint);
    } else {
        srcPath.reset();
        srcPath.addRect(srcRectF, Path.Direction.CCW);
        // 计算tempPath和path的差集
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            srcPath.op(path, Path.Op.DIFFERENCE);
        }
        canvas.drawPath(srcPath, paint);
    }
    paint.setXfermode(null);

    // 绘制遮罩
    if (maskColor != 0) {
        paint.setColor(maskColor);
        canvas.drawPath(path, paint);
    }
    // 恢复画布
    canvas.restore();
    // 绘制边框
    drawBorders(canvas);
}

修改成这样就好了

谢谢,已解决!正确答案

tankman1016 avatar Feb 16 '19 03:02 tankman1016

不知道怎么改, 新人一枚,谁有改好的,可否将改好的发邮件给我,在此谢过了 [email protected]

fwcjszyss avatar Feb 27 '19 02:02 fwcjszyss