Android自定义控件开发入门与实战(13)Android画布

super.onDraw(canvas);

shapeDrawable.draw(canvas);

}

(1)在代码中我们创建了一个ShapeDrawable实例,并且在其构造函数中new出RectShape,所以画出来的一定是一个矩形而不是其他形状。

(2)然后我们通过shapeDrawable的setBounds,来指定ShapeDrawable在当前控件中的显示位置(50,50,200,100)。这里的意思是shapeDrawable会在ShapeView中(50,50,200,100)这两个点所定义的矩形区域显示。需要强调的一点是,这里矩形位置是当前控件的位置,而不是全屏幕的位置。

(3)通过shapeDrawable.getPaint().setColor(Color.RED) 来拿到ShapeDrawable自带的paint,然后给该paint设置color为红色。

最后在xml中显示如下:

在这里插入图片描述

然后我们更改其xml代码:

<com.example.myviewdomo.canvas.ShapeView

android:layout_width=“250px”

android:layout_height=“150px”

android:layout_margin=“100dp”

android:background=“#ffffff” />

这里设置 宽250px,高150px,margin设置100dp,这个shapeDrawable由于宽在50px到200px,高在50-100px,所以在控件中应该是居中显示

在这里插入图片描述

从效果图可以得出下面的结论:

  • ShapeDrawable.setBounds设置的位置的矩形是指在控件中的位置,而不是以左上角为基准的。

  • 通过mShapeDrawable.getPaint()可以直

    接得到drawable的自带的画笔。

Drawable的画布问题

我们调用shapeDrawable.getPaint()获得画笔填充红色后,那么ShapeDrawable的矩形区域的红色是什么时候被填充上去的呢?

有些人可能为认为是在 shapeDrawable.draw(canvas) 这行代码上画进去的,其它的意思是将ShapeDrawable画到当前控件ShapeView上,并没有绘制ShapeDrawable本身。

那也就只能推测,其实是在getPaint().setColor(Color.RED),执行这句话的时候就把颜色填充上去了,实际上也是这样没错的。

最后我们在ShapeView的onDraw()函数调用shapeDrawable.draw(canvas)将重绘过的ShapeDrawable中的样式已经改变了。

OvalShape

就是画椭圆drawable,我们将上面的代码的 new RectShape()改成 new OvalShape(),别的都不做变动,效果如下:

在这里插入图片描述

???我画了个太阳旗出来???

很明显,setBounds函数指定的矩形而生成了对应的椭圆。

ArcShape

ArcShape是在OvalShape的基础上,通过切割指定的角度而得到对应的扇形图形。

ArcShape只有一个构造函数:

public ArcShape(float startAngle,float sweepAngle)

  • startAngle:开始的角度,0°在椭圆你的X轴的正方向上,即向右向中间。

  • sweepAngle:扫过的角度,,正数顺时针,负数逆时针

我们还是通过改变那行初始化的代码来构造一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值