Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在android中绘制半椭圆形形状

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

Stack Overflow用户
提问于 2020-04-28 16:44:03
回答 1查看 179关注 0票数 1

我正试着在安卓系统中用drawArc在两个textView之间画一道弧线。我的要求是实现一个弧形,如图所示

哪一个是正确的弧形。但是当我尝试的时候,我没有得到一个完美的弧形,我得到了一个半椭圆形的弧形

下面是我的代码片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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();
    }


}

请帮助如何使用画布apis实现完美的弧形。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-28 17:49:07

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    paint.setColor(Color.BLACK);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeWidth(5f);

    Path p = new Path();

    float x1 = 100;
    float y1 = 256;

    float x2 = 400;
    float y2 = 32;

    float x3 = 700;
    float y3 = 256;

    p.moveTo(x1, y1);

    p.cubicTo(x2, y2, x2, y2, x3, y3);
    canvas.drawPath(p, paint);
    drawArrow(canvas);
}

这就是结果:

您可以在官方documentation中找到更多关于cubicToquadTo的信息

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61485444

复制
相关文章
[HTML5] Canvas绘制简单形状
使用canvas来进行绘画,它像很多其他dom对象一样,有很多属性和方法,操作这些方法,实现绘画
唯一Chat
2019/09/10
1.1K0
[HTML5] Canvas绘制简单形状
OpenCV之绘制几何形状
python代码: import cv2 as cv import numpy as np image = np.zeros((512, 512, 3), dtype=np.uint8) cv.rectangle(image, (100, 100), (300, 300), (255, 0, 0), 2, cv.LINE_8, 0) cv.circle(image, (256, 256), 50, (0, 0, 255), 2, cv.LINE_8, 0) cv.ellipse(image, (256,
MachineLP
2021/07/19
5140
html前端之css绘制形状
纯CSS绘制的图形,有最简单的矩形、圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,非常强大。
菲宇
2020/07/30
2K0
OpenGL 学习系列---基本形状的绘制
在之前的一篇博客中,讲述了 OpenGL 基础绘制流程 及相关的代码,其中关于 OpenGL 程序编译部分都是可以在其他项目中接着复用的,接下来会讲到如何去绘制其他的基本图元。
音视频开发进阶
2019/07/25
1.9K0
半图绘制,加倍美观!
许多数据的可视化形式都是对称的,例如箱型图、散点图、小提琴图等。由于显示信息的空间有限,可以通过将几何图形切成两半并添加其他几何图形来更好地利用空间。
作图丫
2022/03/29
8120
半图绘制,加倍美观!
Flash在DirectX中的绘制
这里使用的是之前我说过的OLE控件在Direct3D中的渲染方法, 自己不进行swf的解析, 这不现实. 前提条件: COM编程, OLE编程, DirectX编程, ActionScript/Flash(可选). 创建一个ShockwaveFlashObjects::IShockwaveFlash的对象 实现一个IOleClientSite来做为IShockwaveFlash的容器 绘制 通过OleDraw来把GDI的像素数据绘制到DC上(IShockwaveFlash是一个IViewObjec
逍遥剑客
2018/05/23
1.9K0
Android中View是如何绘制的
View的绘制过程从ViewRootImpl.performTraversals()方法开始。
对话、
2022/02/22
2.2K0
使用 Pandas 在 Python 中绘制数据
在有关基于 Python 的绘图库的系列文章中,我们将对使用 Pandas 这个非常流行的 Python 数据操作库进行绘图进行概念性的研究。Pandas 是 Python 中的标准工具,用于对进行数据可扩展的转换,它也已成为从 CSV 和 Excel 格式导入和导出数据的流行方法。
用户1880875
2021/09/15
6.9K0
【OpenCV入门之十五】随心所欲绘制想要形状
画圆画点都是使用circle()函数来画,点就是圆,我们平常所说的圆只不过是半径大一点而已。
小白学视觉
2019/05/30
1.8K0
[译] 绘制路径:Android 中矢量图渲染
在上一篇文章中,我们研究了 Android 的 VectorDrawable 格式,了解了它的优点和功能。
Android 开发者
2019/05/05
3K0
[译] 绘制路径:Android 中矢量图渲染
VBA实用小程序67:绘制任意形状和箭头线
注:由于疏忽,先推送了VBA实用小程序69,将VBA实用小程序67和68漏掉了,这两天陆续补上。谢谢有心人“深海”朋友的提醒!
fanjy
2021/03/12
1.2K0
Android高级进阶之路【一】Android中View绘制流程浅析
一个View,从无到有会走三个流程,也就是老生常谈的measure,layout,draw三流程;
做个快乐的码农
2021/11/17
1.2K0
Android高级进阶之路【一】Android中View绘制流程浅析
SwiftUI:使用 CGAffineTransform 和奇偶填充来变换形状
当您不再满足于简单的形状和路径时,SwiftUI的两个有用功能会合在一起,以极少的工作量创建出漂亮的效果。第一个是CGAffineTransform,它描述了如何旋转,缩放或剪切路径或视图。第二个是奇偶填充(even-odd fills),它使我们可以控制应如何渲染重叠的形状。
韦弦zhy
2020/05/08
1.5K0
C++ OpenCV绘制形状和文字(附随机画线视频)
新建一个项目opencv-0007,配置属性(VS2017配置OpenCV通用属性),然后在源文件写入#include和main方法.并加载我们常用的那个图片显示出来
Vaccae
2019/07/24
2.1K0
用CSS绘制最常见的40种形状和图形
今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形、圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,真的非常强大,分享给大家。
江一铭
2022/06/16
1.4K0
用CSS绘制最常见的40种形状和图形
android绘制虚线
有的时候我们需要一种虚线效果,比如图片的边框,愤怒的小鸟的飞翔路径,那么怎么绘制这些虚线呢?方法很多,目前我觉得好的有两种: 一、自己创建模式,一个点一个点的绘制。 二、用Android提供的 Das
xiangzhihong
2018/01/29
2.3K0
代码在内存中的'形状'
代码在内存中的'形状' http://zoo.zhengcaiyun.cn/blog/article/code-shape
政采云前端团队
2023/02/27
4830
代码在内存中的'形状'
点击加载更多

相似问题

如何在xml中使用可绘制形状绘制半椭圆形(Android)

219

半矩形可绘制形状android

117

如何使用Android矢量图形绘制半椭圆形

11

如何创建半椭圆形状(弯曲线)

20

Android可绘制的椭圆形状,中心超出边界

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文