Canvas Android中的重叠路径



我正在尝试绘制一个由若干路径组成的形状:-

multiple Grey line path like this

Path path1 = new Path();
    path1.moveTo(2 * w, 2 * h);
    path1.lineTo(0, 2 * h - perpendicular);
    pathColorList.add(Pair.create(path1, Color.GRAY));

蓝色行路径像这样

    Path path2 = new Path();
    path2.moveTo(0, 2 * h - perpendicular);
    path2.lineTo(w * 2, 2 * h - 2 * perpendicular);
    pathColorList.add(Pair.create(path2, Color.BLUE));

pathColorList是路径及其油漆颜色的列表。

List<Pair<Path, Integer>> pathColorList = new ArrayList<Pair<Path, Integer>>();
  • 问题是我需要蓝色路径总是在灰色路径的顶部。灰色即使路径重叠蓝色路径;重叠区域必须是蓝色而不是灰色,这样看起来蓝色带仍然在灰色带的顶部。

  • 我已经尝试过了:-

    • 一种方法是绘制所有灰色路径,然后绘制所有蓝色路径。但是我想绘制的形状有多个灰色和蓝色的重叠,需要按照路径动画的顺序绘制,所以我不能这样做。

    • 我尝试在灰色路径上使用PorterDuffXfermode,但portterduffxfermode似乎都不起作用

      for (Pair pathColor: pathColorList) {

          if (pathColor.second == Color.GRAY) {
              if (shader == null) {
                  shader = new LinearGradient(0, 0, 0, getWidth(),
                          Color.DKGRAY, Color.LTGRAY, Shader.TileMode.MIRROR);
                  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
                  paint.setColor(pathColor.second);
              }
              paint.setShader(shader);
          } else {
              paint.setShader(null);
              paint.setColor(pathColor.second);
              paint.setXfermode(null);
          }
          canvas.drawPath(pathColor.first, paint);
      }
      

我不知道我做错了什么。任何帮助都将不胜感激。

试试这个…

1。-把你的颜色按你的颜色偏好排序。

public static final int COLORS[]={Color.BLUE,Color.RED,Color.YELLOW, Color.MAGENTA,Color.GREEN,Color.CYAN};

2。-对象Path有一个int变量保持颜色Path

3。-在绘制之前,你有一个包含路径对象的列表

4。-在油漆之前,按颜色属性和1

中描述的颜色偏好标准对路径列表进行排序

祝你好运! !

相关内容

  • 没有找到相关文章

最新更新