android - 用曲线绘制形状

标签 android xml drawable shapes

像这张图一样画什么enter image description here

为此将使用链接 ShapeDrawable Drawing multiple shapes with ShapeDrawable in xml with Android但不知道如何制作线曲线 - - - - - - - - - - -编辑 - - - - - - - - - - - - - - ------

基于@Bojan Kseneman 的回答尝试使用以下代码

    PointF pt1l = new PointF(canvas.getWidth()/2+40, (float)newPosY-canvas.getWidth()/40);//canvas.getWidth()/40
    PointF pt2l = new PointF(canvas.getWidth()/2+40, (float)newPosY+canvas.getWidth()/40);
    PointF midl = new PointF(canvas.getWidth()/2+30, (float)newPosY+canvas.getWidth()/40);

    PointF pt1r = new PointF(canvas.getWidth()/2-40, (float)newPosY-canvas.getWidth()/40);
    PointF pt2r = new PointF(canvas.getWidth()/2-40, (float)newPosY+canvas.getWidth()/40);
    PointF midr = new PointF(canvas.getWidth()/2-30, (float)newPosY+(canvas.getWidth()/40)/2);

    Path pathLeft = new Path();
    //pathLeft.setFillType(Path.FillType.EVEN_ODD);
    pathLeft.moveTo(pt1l.x,pt1l.y);
    pathLeft.quadTo(midl.x,midl.y,pt2l.x,pt2l.y);

    Path pathRight = new Path();
    //pathRight.setFillType(Path.FillType.EVEN_ODD);
    pathRight.moveTo(pt1r.x,pt1r.y);
    pathRight.quadTo(midr.x,midr.y,pt2r.x,pt2r.y);
    Paint curveLineR = new Paint();
    curveLineR.setColor(Color.GREEN);

    Paint curveLineL = new Paint();
    curveLineL.setColor(Color.GREEN);

    Paint circle = new Paint();
    circle.setColor(Color.GREEN);

    canvas.drawPath(pathLeft, curveLineL);
    canvas.drawPath(pathRight, curveLineR);
    //canvas.drawCircle(canvas.getWidth()/2,canvas.getHeight()/2,canvas.getWidth()/30,circle);
    canvas.drawCircle(canvas.getWidth()/2,(float)newPosY,canvas.getWidth()/40,circle);

但没有得到更像圆的一部分的曲线(改变 midr 和 midl 的值变得更接近但仍然不是一条线)。也许通过更多的测试可以得到这条线,但现在只需要圆圈,对于任何也试图让曲线离开代码的人来说,+1 给@Bojan Kseneman 指向正确的方向。

最佳答案

您应该创建一个自定义 View 并使用 Canvas 绘制类似的东西。您必须在中间绘制两条路径(两条曲线)和一个圆圈。这是基本思路,您必须自己完成其余的工作。

protected void onDraw(Canvas canvas) {
 super.onDraw(canvas);
 Path pathLeft = new Path();
 pathLeft.moveTo(x1, y1);
 pathLeft.quadTo(x1, y1, x2, y2);

 Path pathRight = new Path();
 pathLeft.moveTo(x1, y1);
 pathLeft.quadTo(x1, y1, x2, y2);

 canvas.drawPath(pathLeft, mPathPaint);
 canvas.drawPath(pathRight, mPathPaint);
 canvas.drawCircle(x, y, radius, paint); 
}

关于android - 用曲线绘制形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30017209/

相关文章:

Android:使用底部或其他一些类似于 css background-position 的对齐方式绘制平铺位图

android - 如何使多个 url 链接显示在数组中?

Android Nkzawa SocketIO 断开连接并建立新连接

java - 如何在 Android 上使用 Google Translate API v2

Android - 空闲时允许重复闹钟

android - 当文本太长时,如何减小 TextView 的大小?

android - 为什么这种涟漪效应没有按预期发挥作用?

Android map - 标记边界位于 map 区域上半部分的中心

XML 解析错误 : not well-formed ? 任何人都可以

python - 在Python中解析CityGML时没有结果