圆角可以使用棒棒糖的轮廓和前棒棒堂的路径来完成。请参阅:
准备口罩
if (cornerRadius > 0) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setClipToOutline(true);
setOutlineProvider(ShadowShape.viewOutlineProvider);
} else {
cornersMask = new Path();
cornersMask.addRoundRect(new RectF(0, 0, getWidth(), getHeight()), cornerRadius, cornerRadius, Path.Direction.CW);
cornersMask.setFillType(Path.FillType.INVERSE_WINDING);
}
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
setOutlineProvider(ViewOutlineProvider.BOUNDS);
}
平局(Canvas)的方法
if (cornerRadius > 0 && getWidth() > 0 && getHeight() > 0 && Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT_WATCH) {
int saveFlags = Canvas.MATRIX_SAVE_FLAG | Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.FULL_COLOR_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG;
int saveCount = canvas.saveLayer(0, 0, getWidth(), getHeight(), null, saveFlags);
super.draw(canvas);
paint.setXfermode(pdMode);
canvas.drawPath(cornersMask, paint);
canvas.restoreToCount(saveCount);
paint.setXfermode(null);
} else {
super.draw(canvas);
}
和失踪viewOutlineProvider
viewOutlineProvider = new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
ShadowShape shadowShape = ((ShadowView) view).getShadowShape();
if (shadowShape == RECT) {
outline.setRect(0, 0, view.getWidth(), view.getHeight());
} else if (shadowShape == ROUND_RECT) {
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), ((CornerView) view).getCornerRadius());
} else if (shadowShape == CIRCLE) {
outline.setOval(0, 0, view.getWidth(), view.getHeight());
}
}
};
而且图像:
你可以乱用这个代码在任何你想要的方式。您可以将图像和背景分别切割成任意形状,也可以一起切割。欲了解更多详情,请查阅github上的代码。
发布您正在使用的代码 – Blackbelt
您是否尝试在xml文件中为您设置'android:background =“@ android:color/transparent”'ImageView'标记? – mbelsky
@mbelsky我想要一个背景颜色,实际上。 – mrmoment