Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在android中绘制半椭圆形形状_Java_Android_Canvas - Fatal编程技术网

Java 在android中绘制半椭圆形形状

Java 在android中绘制半椭圆形形状,java,android,canvas,Java,Android,Canvas,我试图在android中用drawArc在两个textView之间画一条弧。我的要求是实现如图所示的正确弧形。 但是当我尝试时,我没有得到一个完美的弧线形状,我得到了半椭圆形的弧线 以下是我的代码片段: public class ArcView extends View { final RectF oval = new RectF(); Path myPath = new Path(); Paint paint; float left, top, right,

我试图在android中用drawArc在两个textView之间画一条弧。我的要求是实现如图所示的正确弧形。 但是当我尝试时,我没有得到一个完美的弧线形状,我得到了半椭圆形的弧线

以下是我的代码片段:

public class ArcView extends View {

    final RectF oval = new RectF();
    Path myPath = new Path();
    Paint paint;
    float left, top, right, bottom;

    public FlightStatusArcView(Context context) {
        super(context);
    }
    public FlightStatusArcView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(attrs);
    }
    public FlightStatusArcView(Context context, AttributeSet attrs, int defStyleAttr)     {
        super(context, attrs, defStyleAttr);
        init(attrs);
    }

    private void init(AttributeSet set) {
        if (set == null)
            return;
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }

    public void setArcProperties(float l, float t, float r, float b) {
        left = l;
        top = t;
        right = r;
        bottom = b;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        oval.set(left, top, right, bottom);
        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(5f);

        canvas.drawArc(oval, 180f, 180f, false, paint);
        drawArrow(canvas);
    }



    private void drawArrow(Canvas canvas) {

        canvas.save();

        Paint p = new Paint();
        p.setColor(Color.WHITE);
        p.setStyle(Paint.Style.FILL);
        p.setStrokeWidth(4f);

        float startX = oval.left + 20;
        float startY = oval.top + (oval.centerY() - oval.top)/ 2;

        Path path = new Path();
        path.moveTo(startX, startY-20);
        path.lineTo(startX + 20, startY + 20);
        path.lineTo(startX + 30, startY -17);
        path.close();
        canvas.drawPath(path, p);
        canvas.restore();
    }


}

请帮助我们如何使用canvas API实现完美的圆弧形状。

您可以使用
路径
quadTo
cubicTo
来绘制这样的曲线。这将允许您绘制二次或三次贝塞尔曲线。例如,具有两个相同控制点
(x2,y2)
的三次贝塞尔曲线的构造如下:

@覆盖
受保护的void onDraw(画布){
super.onDraw(帆布);
油漆。设置颜色(颜色。黑色);
绘制.设置样式(绘制.样式.笔划);
油漆。设置行程宽度(5f);
路径p=新路径();
浮点x1=100;
浮动y1=256;
浮动x2=400;
浮动y2=32;
浮动x3=700;
浮点数y3=256;
p、 moveTo(x1,y1);
p、 立方体(x2,y2,x2,y2,x3,y3);
画布.绘图路径(p,油漆);
绘图箭头(画布);
}
结果是:


有关
cubicTo
quadTo
的更多信息,请访问官方网站

谢谢。我使用quadTo实现了同样的效果。