添加CornerPathEffect时FillType.EVEN_ODD的不同行为?

时间:2015-05-19 04:36:21

标签: android path drawable paint shape

我在这里试验import Foundation import UIKit class View2: UIViewController { override func viewDidLoad(){ formulaSelection.text = indexPathForCell(Cell: UITableView) } } 并找到了我无法解释的内容,并希望有人可以帮助我。

为什么向UITextFieldDelegate添加Drawable似乎“打破”(?)CornerPathEffect Paint

更具体地说,我正在按原样测试this HexagonDrawable类。这就是我得到的:

Hard corners, outlined, expected behavior.

但是,如果我将EVEN_ODD设置为FillType,如下所示(构造函数)......

CornerPathEffect

......这就是我得到的:

Rounded corners, outline effect disappears, unexpected behavior?

圆角,是的,但没有轮廓的外观(奇数/偶数/奇数)。有人可以解释一下原因吗?

1 个答案:

答案 0 :(得分:5)

HexagonDrawable类绘制两个不同的六边形,堆叠在一起。我不知道你是否需要这样做,但我认为实现相同结果的最佳方法是使用Paint with Stroke风格。

为此,您需要移除第二个六边形路径并减小六边形的大小(因此视图不会将其剪切掉):

public void computeHex(Rect bounds) {

    final int width = bounds.width();
    final int height = bounds.height();
    // We need to decrease the hexagon's size, so the view won't cut our stroke
    final int size = Math.min(width - (strokeWidth / 2), height - (strokeWidth / 2));
    final int centerX = bounds.left + (width / 2);
    final int centerY = bounds.top + (height / 2);

    hexagon.reset();
    hexagon.addPath(createHexagon(size, centerX, centerY));
    // Remove the second path
    // hexagon.addPath(createHexagon((int) (size * .8f), centerX, centerY));
} 

并将描边效果添加到绘画中:

private int strokeWidth;

public HexagonDrawable(int color, int strokeWidth) {        
    this.strokeWidth = strokeWidth;

    paint.setColor(color);

    // Add Stroke style and width
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(strokeWidth);

    // You can add these other attributes if you need to
    // paint.setDither(true);
    // paint.setStrokeJoin(Paint.Join.ROUND);
    // paint.setStrokeCap(Paint.Cap.ROUND);

    // Remove the fill type, you won't need anymore
    // hexagon.setFillType(Path.FillType.EVEN_ODD);

    // Finally add the Path Effect
    paint.setPathEffect(new CornerPathEffect(30.0f));
}

这应该会产生与你所寻找的效果非常相似的效果。

希望它有所帮助! ;)

编辑:我忘了警告你,行程宽度不能超过CornerPathEffect的半径,否则它会被切断。