onDraw Triangle仅在方向为南或东时才有效

时间:2017-03-04 11:39:53

标签: android xml

我实现了一个扩展视图并绘制三角形的自定义类。该代码适用于北方和西方方向,但在南方和东方失败,我无法得到合理的解释原因,这没有任何意义。伙计们好吗?谢谢。

public class Triangle extends View {

Paint mPaint;

Path mPath;

public enum Direction {
    NORTH, SOUTH, EAST, WEST
}

public Triangle(Context context) {
    super(context);
    create();
}

public Triangle(Context context, AttributeSet attrs) {
    super(context, attrs);
    create();
}

public void setColor(int color) {
    mPaint.setColor(color);
    invalidate();
}

private void create() {
    mPaint = new Paint();
    mPaint.setStyle(Style.FILL);
    mPaint.setColor(Color.RED);
}

@Override
protected void onDraw(Canvas canvas) {
    mPath = calculate(Direction.SOUTH);
    canvas.drawPath(mPath, mPaint);
}

private Path calculate(Direction direction) {
    Point p1 = new Point();
    p1.x = 0;
    p1.y = 0;

    Point p2 = null, p3 = null;

    int width = getWidth();

    if (direction == Direction.NORTH) {
        p2 = new Point(p1.x + width, p1.y);
        p3 = new Point(p1.x + (width / 2), p1.y - width);
    } else if (direction == Direction.SOUTH) {
        p2 = new Point(p1.x + width, p1.y);
        p3 = new Point(p1.x + (width / 2), p1.y + width);
    } else if (direction == Direction.EAST) {
        p2 = new Point(p1.x, p1.y + width);
        p3 = new Point(p1.x - width, p1.y + (width / 2));
    } else if (direction == Direction.WEST) {
        p2 = new Point(p1.x, p1.y + width);
        p3 = new Point(p1.x + width, p1.y + (width / 2));
    }

    Path path = new Path();
    path.moveTo(p1.x, p1.y);
    path.lineTo(p2.x, p2.y);
    path.lineTo(p3.x, p3.y);

    return path;
 }
}

0 个答案:

没有答案