【发布时间】: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