【问题标题】:Overlap Paths in Canvas AndroidCanvas Android 中的重叠路径
【发布时间】:2016-10-28 03:51:08
【问题描述】:

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

多个灰色这样的线路路径

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,但 PorterDuffXfermode 似乎都不起作用

      for (对路径颜色 : 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);
      }
      

我无法弄清楚我做错了什么。任何帮助将不胜感激。

【问题讨论】:

  • 先画灰色的东西,再画蓝色的东西,不用Xfermodes了
  • 是的,这是我尝试的第一件事,我也提到过它。我还需要路径绘制动画,如果我先绘制一半视图然后另一半则无法完成。
  • path draw animation 是什么意思?

标签: android android-canvas android-custom-view porter-duff


【解决方案1】:

试试这个...

1.- 将颜色放入按您的颜色偏好排序的数组中。

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

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

3.- 在绘制之前,您有一个包含 Path 对象的列表

4.- 在绘制顺序之前,此 路径 按颜色属性和 1 中描述的颜色偏好标准列出

祝你好运!!!!

【讨论】:

    猜你喜欢
    • 2012-03-16
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 2021-07-21
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多