0

いくつかのパスで構成される形状を描画しようとしています:-

このような複数の灰色の線のパス

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>>();
  • 問題は、常にグレーパスの上にブルーパスが必要なことです。灰色のパスが青色のパスと重なっても 、オーバーラップ領域は灰色ではなく青色でなければならないため、青色のバンドが依然として灰色のバンドの上にあるように見えます。

  • 私が試したこと: -

    • 1 つの方法は、すべて灰色のパスを描画してから、すべて青色のパスを描画することです。しかし、私がプロットしようとしている形状には、パスアニメーションの順序でプロットする必要がある複数のグレーとブルーのオーバーラップがあるため、このようにすることはできません。

    • グレイ パスで使用PorterDuffXfermodeしてみましたが、PorterDuffXfermode のどれも機能していないようです

      for (ペア 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);
      }
      

私は自分が間違っていることを理解できません。どんな助けでも大歓迎です。

4

1 に答える 1