Android布局对角线切割

use*_*730 4 android android-layout diagonal

如何使用内容对角切割布局(LinearLayout或RelativeLayout)?

该模型看起来像这样:

在此输入图像描述

我尝试使用对角线布局库,如https://github.com/florent37/DiagonalLayout,但我似乎无法在图像的右侧和第二个布局的左侧使用库或自定义视图进行此剪切.

任何帮助,将不胜感激.

R. *_*ski 9

您可以自己绘制每个ViewGroup的背景.

此解决方案中有一些关键点:

  1. 你需要扩展所需的ViewGroup:

    public class DiagonalLayout extends LinearLayout
    
    Run Code Online (Sandbox Code Playgroud)
  2. 覆盖功能:

    protected void dispatchDraw(Canvas canvas)

  3. 填写上面的方法.以下是示例代码:

    @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);
    }
    
    Run Code Online (Sandbox Code Playgroud)

上面代码的效果是:

在此输入图像描述

上面的代码是:

  1. 在左侧绘制多边形.
  2. 保存Canvas状态,剪切Canvas到多边形并用颜色填充它
  3. 恢复Canvas到原始大小,绘制第二个多边形

要绘制位图,请使用drawBitmap (Bitmap bitmap, Matrix matrix, Paint paint)方法而不是用红色填充它.