当前位置:首页 » 安卓系统 » 安卓怎么绘制矩形

安卓怎么绘制矩形

发布时间: 2023-02-10 19:36:35

⑴ 在屏幕Android开发的中间,如何绘制矩形

先问一下你,应该知道View吧。就是自定义view。在那个里面用canvas(left,top,right,bottom,Paint)

屏幕中间的坐标就是手机屏幕x/2,y/2的地方。然后从这个坐标减去矩形宽(对应x)和高(对应y)就是矩形的左上角的坐标,也就是前两个参数,而后面两个就是从中心坐标加上矩形的宽和高。

比方说,我在720,1280的屏幕中间画矩形。就是
canvas.drawRect
(X-w/2 , Y-h/2 , X+w/2 , Y+w/2 , p)
这里X是屏幕宽度大小的一半
Y是高度发现的一半
w是矩形的宽度
h是矩形的高度
p是Paint对象

希望采纳

⑵ android绘图之Canvas基础(2)

Canvas画布,用于绘制出各种形状配合画布的变幻操作可以绘制出很多复杂图形,基本的绘制图形分类。
提供的绘制函数:

上面四个函数都可以绘制canvas的背景,注意到PorterDuff.Mode变量,它只对两个canvas绘制bitmap起作用,所以此处暂时不讨论mode参数(没有设置mode默认使用srcover porterff mode)。

Rect 和RectF都是提供一个矩形局域。
(1)精度不一样,Rect是使用int类型作为数值,RectF是使用float类型作为数值。
(2)两个类型提供的方法也不是完全一致。

**
rect:RectF对象,一个矩形区域。
rx:x方向上的圆角半径。
ry:y方向上的圆角半径。
paint:绘制时所使用的画笔。**

**
cx 圆心x
cy 圆心y
radius半径**

需要一个Path,代表路径后面会讲解。

绘制线的集合,参数中pts是点的集合,两个值代表一个点,四个值代表一条线,互相之间不连接。
offset跳过的点,count跳过之后要绘制的点的总数,可以用于集合中部分点的绘制。

跳过部分节点:

没有跳过点

RectF oval:生成弧的矩形,中心为弧的圆心
float startAngle:弧开始的角度,以X轴正方向为0度,顺时针
float sweepAngle:弧持续的角度
boolean useCenter:是否有弧的两边,True,还两边,False,只有一条弧

在矩形框内画一个椭圆,如果是个正方形会画出一个圆。

canvas.drawPoint();
canvas.drawPoints();

**
只需要提供两个点一个坐标就可以绘制点。
canvas.drawPoint(20,20,mPaint);
float[] points = {30,40,40,50,60,60};
canvas.drawPoints(points,mPaint);**

这几种方法类似:
canvas.drawText("好好学习,天天向上",100,100,mPaint);

drawTextOnPath
沿着一条 Path 来绘制文字
text 为所需要绘制的文字
path 为文字的路径
hOffset 文字相对于路径的水平偏移量,用于调整文字的位置
vOffset 文字相对于路径竖直偏移量,用于调整文字的位置
值得注意的是,在绘制 Path 的时候,应该在拐弯处使用圆角,这样文字显示时更舒服

大致讲解,后面会重点讲解。

Rect src
Rect dst
其中src和dst这两个矩形区域是用来做什么的?
Rect src:指定绘制图片的区域
Rect dst或RectF dst:指定图片在屏幕上的绘制(显示)区域
首先指定图片区域,然后指定绘制图片的区域。

android绘图之Paint(1)
android绘图之Canvas基础(2)
Android绘图之Path(3)
Android绘图之drawText绘制文本相关(4)
Android绘图之Canvas概念理解(5)
Android绘图之Canvas变换(6)
Android绘图之Canvas状态保存和恢复(7)
Android绘图之PathEffect (8)
Android绘图之LinearGradient线性渐变(9)
Android绘图之SweepGradient(10)
Android绘图之RadialGradient 放射渐变(11)
Android绘制之BitmapShader(12)
Android绘图之ComposeShader,PorterDuff.mode及Xfermode(13)
Android绘图之drawText,getTextBounds,measureText,FontMetrics,基线(14)
Android绘图之贝塞尔曲线简介(15)
Android绘图之PathMeasure(16)
Android 动态修改渐变 GradientDrawable

⑶ android怎么画圆角的矩形

如果你是在自定义view的onDraw方法中:

java">RectFrectF=newRectF(100,100,500,500);//先画一个矩形
Paintpaint=newPaint(Paint.ANTI_ALIAS_FLAG);//创建画笔
paint.setColor(R.color.colorAccent);//添加画笔颜色
canvas.drawRoundRect(rectF,30,30,paint);//根据提供的矩形为四个角画弧线,(其中的数字:第一个表示X轴方向大小,第二个Y轴方向大小。可以改成其他的,你可以自己体验),最后添加画笔。

如果你是在布局中直接添加,楼上已经做出方法,我就不举例了。

⑷ Android 自定义View之Draw过程(上)

Draw 过程系列文章

Android 展示之三部曲:

前边我们已经分析了:

这俩最主要的任务是: 确定View/ViewGroup可绘制的矩形区域。
接下来将会分析,如何在这给定的区域内绘制想要的图形。

通过本篇文章,你将了解到:

Android 提供了关于View最基础的两个类:

然而ViewGroup 并没有约定其内部的子View是如何布局的,是叠加在一起呢?还是横向摆放、纵向摆放等。同样的View 也没有约定其展示的内容是啥样,是矩形、圆形、三角形、一张图片、一段文字抑或是不规则的形状?这些都要我们自己去实现吗?
不尽然,值得高兴的是Android已经考虑到上述需求了,为了开发方便已经预制了一些常用的ViewGroup、View。
如:
继承自ViewGroup的子类

继承自View的子类

虽然以上衍生的View/ViewGroup子类已经大大为我们提供了便利,但也仅仅是通用场景下的通用控件,我们想实现一些较为复杂的效果,比如波浪形状进度条、会发光的球体等,这些系统控件就无能为力了,也没必要去预制千奇百怪的控件。想要达到此效果,我们需要自定义View/ViewGroup。
通常来说自定义View/ViewGroup有以下几种:

3 一般不怎么用,除非布局比较特殊。1、2、4 是我们常用的手段,对于我们常说的"自定义View" 一般指的是 4。
接下来我们来看看 4是怎么实现的。

在xml里引用MyView

效果如下:

黑色部分为其父布局背景。
红色矩形+黄色圆形即是MyView绘制的内容。
以上是最简单的自定义View的实现,我们提取重点归纳如下:

由上述Demo可知,我们只需要在重写的onDraw(xx)方法里绘制想要的图形即可。
来看看View 默认的onDraw(xx)方法:

发现是个空实现,因此继承自View的类必须重写onDraw(xx)方法才能实现绘制。该方法传入参数为:Canvas类型。
Canvas翻译过来一般叫做画布,在重写的onDraw(xx)里拿到Canvas对象后,有了画布我们还需要一支笔,这只笔即为Paint,翻译过来一般称作画笔。两者结合,就可以愉快的作画(绘制)了。
你可能发现了,在Demo里调用

并没有传入Paint啊,是不是Paint不是必须的?实际上调用该方法后,底层会自动生成Paint对象。

可以看到,底层初始化了Paint,并且给其设置的颜色为在Java层设置的颜色。

onDraw(xx)比较简单,开局一个Canvas,效果全靠画。
试想,这个Canvas怎么来的呢,换句话说是谁调用了onDraw(xx)。发挥一下联想功能,在Measure、Layout 过程有提到过两者套路很像:

那么Draw过程是否也是如此套路呢?看见了onDraw(xx),那么draw(xx)还远吗?
没错,还真有draw(xx)方法:

可以看出,draw(xx)主要分为两个部分:

不管是A分支还是B分支,都进行了好几步的绘制。
通常来说,单一一个View的层次分为:

后面绘制的可能会遮挡前边绘制的。
对于一个ViewGroup来说,层次分为:

来看看A分支标注的4个点:
(1)
onDraw(canvas)
前面分析过,对于单一的View,onDraw(xx)是空实现,需要由我们自定义绘制。
而对于ViewGroup,也并没有具体实现,如果在自定义ViewGroup里重写onDraw(xx),它会执行吗?默认是不会执行的,相关分析请移步:
Android ViewGroup onDraw为什么没调用

(2)
dispatchDraw(canvas),来看看在View.java里的实现:

发现是个空实现,再看看ViewGroup.java里的实现:

也即是说,对于单一View,因为没有子布局,因此没必要再分发Draw,而对于ViewGroup来说,需要触发其子布局发起Draw过程(此过程后续分析),可以类比事件分发过程View、ViewGroup的处理。感兴趣的请移步:
Android 输入事件一撸到底之View接盘侠(3)

(3)
OverLay,顾名思义就是"盖在某个东西上面",此处是在绘制内容之后,绘制前景之前。怎么用呢?

以上是给一个ViewGroup设置overLay,效果如下:

你可能发现了,这和设置overLay差不多的嘛,实际还是有差别的。在onDrawForeground(xx)里会重新调整Drawable的尺寸,该尺寸与View大小一致,之前给Drawable设置的尺寸会失效。运行效果如下:

可以看出,ViewGroup都被前景盖住了。
再来看看B分支的重点:边缘渐变效果
先来看看TextView 边缘渐变效果:

加上这俩参数。
实际上系统自带的一些控件也使用了该效果,如NumberPicker、YearPickerView

以上是NumberPicker 的效果,可以看出是垂直方向渐变的。

对于View.java 里的onDraw(xx)、draw(xx),ViewGroup.java里并没有重写。
而对于dispatchDraw(xx),在View.java里是空实现。在ViewGroup.java里发起对子布局的绘制。

来看看标记的2点:
(1)
设置padding的目的是为了让子布局留出一定的空隙出来,因此当设置了padding后,子布局的canvas需要根据padding进行裁减。判断标记为:

FLAG_CLIP_TO_PADDING 默认设置为true
FLAG_PADDING_NOT_NULL 只要有padding不为0,该标记就会打上。
也就是说:只要设置了padding 不为0,子布局显示区域需要裁减。
能不能不让子布局裁减显示区域呢?
答案是可以的。
考虑到一种场景:使用RecyclerView的时候,我们需要设置paddingTop = 20px,效果是:RecyclerView Item展示时离顶部有20px,但是滚动的时候永远滚不到顶部,看起来不是那么友好。这就是上述的裁减起作用了,需要将此动作禁止。通过设置:

当然也可以在xml里设置:

(2)
drawChild(xx)

从方法名上看是调用子布局进行绘制。
child.draw(x1,x2,x3)里分两种情况:

这两者具体作用与区别会在下篇文章分析,不管是硬件加速绘制还是软件加速绘制,最终都会调用View.draw(xx)方法,该方法上面已经分析过。
注意,draw(x1,x2,x3)与draw(xx)并不一样,不要搞混了。

用图表示:

View/ViewGroup Draw过程的联系:

一般来说,我们通常会自定义View,并且重写其onDraw(xx)方法,有没有绘制内容的ViewGroup需求呢?
是有的,举个例子,大家可以去看看RecyclerView ItemDecoration 的绘制,其中运用到了ViewGroup draw(xx)、ViewGroup onDraw(xx) 、View onDraw(xx)绘制的先后顺序来实现分割线,分组头部悬停等功能的。

本篇文章基于 Android 10.0

⑸ Android自定义View(3) 《Canvas绘制简单的图形》

在Android中,我们经常会需要去绘制一些自己需要的控件,所以继承自View的自定义View就产生了。这篇文章主要介绍在View中的重要类,Canvas类。

Canvas是自定义View中几个最重要的类之一,可以理解为画布,但是我理解下来,这只是单一的图层,每次Canvas绘制时其实都是在canvas类所定义出的一个图层上进行绘制图形,一旦canvas变化,则图层也发生变化,图层变化之前绘制的结果不变,但之后的绘制结果会以新的图层为基准进行绘制

在这里绘制线条调用Canvas.drawLine(float startX, float startY, float stopX, float stopY,Paint paint)方法,参数分别如下

绘制矩形调用canvas.drawRect(RectF rect, Paint paint),矩形Rect的构造参数的四个参数分别为左边界,上边界,右边界,下边界的值,单位为px,RectF与Rect不同之处在于构造参数的类型一个全为float,一个全为int,运行结果如下

绘制椭圆主要调用drawOval(RectF oval, Paint paint),以一个矩形的边界来绘制一个椭圆,运行结果如下

绘制圆主要使用Canvas.drawCircle(float cx, float cy, float radius, Paint paint),

绘制Path的方法比较多,这里只简单示例绘制线条路径构建一个三角形的用法,后续会再详细介绍绘制别的类型路径的用法,该例运行结果如下

这里我们绘制了一段文字和一根线段这里是为了演示出Canvas中的文字的绘制方法只能实现水平方向上的居中显示,垂直方向上的垂直是需要我们再进行实现的,绘制文字有很多个,我们这里只简单调用了设置起始点的绘制方法,关于文字的绘制其实内容还是比较多的,这里我们就只简单的介绍,后续有时间会专门出一个文字绘制的文章,该示例运行结果如下

今天总结了Canvas中一些简单图形的绘制,下篇我们介绍Canvas中的一些其他内容。

⑹ android里面如何填充矩形呢

方案:

在canvas上画矩形,然后设置画笔为实心就可以了。

代码示例:

paint.setStyle(Style.FILL);//实心矩形框
paint.setColor(Color.RED);//颜色为红色
canvas.drawRect(newRectF(10,10,300,100),paint);//画一个290*90的红色实心矩形

⑺ Android:如下关于绘制圆角矩形边框问题,怎么解决

paint.setAntiAlias(true);

尝试在画笔上设置抗锯齿

热点内容
云访问安全 发布:2025-05-17 18:36:31 浏览:625
算法设计与分析课件 发布:2025-05-17 18:21:11 浏览:766
安卓禁止软件安装怎么解除 发布:2025-05-17 18:16:52 浏览:219
绝地求生极客电脑怎么配置 发布:2025-05-17 18:16:50 浏览:51
显卡编程语言 发布:2025-05-17 18:11:46 浏览:919
编程用什么轴机械键盘 发布:2025-05-17 18:10:35 浏览:960
金融工程编程 发布:2025-05-17 18:10:33 浏览:224
私密模式访问 发布:2025-05-17 18:09:44 浏览:788
数据库崩溃原因 发布:2025-05-17 18:09:42 浏览:307
对虾养殖增氧机如何配置 发布:2025-05-17 18:08:20 浏览:443