如何以对角线方式剪切包含内容的布局(线性布局或相对布局)?
模型看起来是这样的:
android - Android布局对角线切割-LMLPHP
我试过使用像https://github.com/florent37/DiagonalLayout这样的对角线布局库,但我似乎无法在图像的右侧和第二个布局的左侧使用库或自定义视图进行此剪切。
任何帮助都将不胜感激。

最佳答案

您可以自己绘制每个视图组的背景。
这个解决方案有几个要点:
您需要扩展所需的ViewGroup

public class DiagonalLayout extends LinearLayout

重写函数:
protected void dispatchDraw(Canvas canvas)
填写上面的方法。下面是示例代码:
@Override
protected void dispatchDraw(Canvas canvas) {
    int height = canvas.getHeight();
    int width = canvas.getWidth();
    Path path = new Path();
    path.moveTo(0, 0);
    path.lineTo(width / 3 + width / 10, 0);
    path.lineTo(width / 3 - width / 10, height);
    path.lineTo(0, height);
    path.close();
    canvas.save();
    canvas.clipPath(path, Region.Op.INTERSECT);
    canvas.drawColor(ContextCompat.getColor(getContext(), android.R.color.holo_red_dark));
    canvas.restore();
    path = new Path();
    path.moveTo(width / 3 + width / 10 + width / 10, 0);
    path.lineTo(width, 0);
    path.lineTo(width, height);
    path.lineTo(width / 3, height);
    path.close();
    canvas.save();
    canvas.clipPath(path, Region.Op.INTERSECT);
    Paint paint = new Paint();
    paint.setStrokeWidth(8);
    paint.setStyle(Paint.Style.STROKE);
    paint.setColor(ContextCompat.getColor(getContext(), android.R.color.black));
    canvas.drawPath(path, paint);
    canvas.restore();
    super.dispatchDraw(canvas);
}

上述代码的作用是:
android - Android布局对角线切割-LMLPHP
上面的代码是:
在左边画多边形。
保存Canvas状态,将Canvas剪辑到多边形并用颜色填充
Canvas还原为原始大小,绘制第二个多边形
要绘制位图,请使用drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)方法而不是用红色填充它。

09-11 18:59
查看更多