Canvas样式

Canvas样式


线条样式

ctx.lineWidth
设置线条宽度,设置当前绘线的粗细。属性值必须为正数。默认值是 1.0

ctx.lineWidth = 10

ctx.lineCap
设置线段端点样式,可选值为:butt,round 和 square。默认是 butt

	ctx.lineCap = 'butt'
    ctx.lineCap = 'round'
    ctx.lineCap = 'square'

lineJoin
该属性可以设置两线段连接处所显示的样子。可选值为:round, bevel 和 miter。默认是 miter

ctx.lineJoin = 'miter'

miterLimit
限制当两条线相交时交接处最大长度
所谓交接处长度(斜接长度)是指线条交接处内角顶点到外角顶点的长度

ctx.miterLimit = 3

setLineDash/getLineDash
setLineDash 可以设置当前虚线样式
getLineDash 则是返回当前虚线设置的样式,长度为非负偶数的数组

ctx.setLineDash([5,10,40,30])
// 如果个数为奇数个 setLineDash会复制一份一样的数组拼接到一起变成偶数个 
// eg: [1,2,3] => [1,2,3,1,2,3]
//     [1,2] => [1,2]

lineDashOffset
设置虚线样式的起始偏移量

ctx.lineDashOffset = 5

透明度

globalAlpha
全局透明度

	ctx.globalAlpha = 0.5

样式透明度

	ctx.fillStyle = "rgba(0, 255, 0, 0.2)";
    ctx.fillRect(10,10,300,100)



渐变

线性渐变

createLinearGradient(x1, y1, x2, y2),参数分别为 起点的坐标和终点的坐标。

在渐变的设置中还需要一个方法来添加渐变的颜色,语法为:gradient.addColorStop(offset, color),其中color就是颜色,offset 则是颜色的偏移值,只为0到1之间的数

	const gradient = ctx.createLinearGradient(10, 10, 400, 10)
    gradient.addColorStop(0, '#00FF00')
    gradient.addColorStop(1, '#0000FF')

径向渐变
径向渐变 语法:ctx.createRadialGradient(x0, y0, r0, x1, y1, r1),参数分别为开始圆的坐标和半径以及结束圆的坐标和半径。

	const gradient = ctx.createRadialGradient(100, 100, 100, 100, 100, 10)
    gradient.addColorStop(0, '#00FF00')
    gradient.addColorStop(1, '#0000FF')



图形样式

Canvas中想绘制图案效果,需要用 createPattern 方法来实现。

语法:createPattern(image, type)

Image 参数可以是一个 Image 对象,也可以是一个 canvas 对象
Type 为图案绘制的类型,可用的类型分别有:repeat,repeat-x,repeat-y 和 no-repeat。

	const img = new Image()
	img.src = './test/webGIS/vite-cesium/src/assets/vue.svg'
	img.onload = ()=>{
		const gradient = ctx.createPattern(img, 'repeat')
		ctx.fillStyle = gradient;
		ctx.fillRect(10, 10, 400, 100);
	}

使用canvas绘制canvas

	const ctx = canvas.getContext('2d')
    const ctx2 = canvas2.getContext('2d')
    
	img.onload = () => {
		const gradient = ctx.createPattern(img, 'repeat')
		ctx.fillStyle = gradient;
		ctx.fillRect(10, 10, 400, 100);

		const gradient2 = ctx2.createPattern(canvas, 'repeat')
		ctx2.fillStyle = gradient2;
		ctx2.fillRect(10, 10, 400, 100);
 	}
### Avalonia UI Framework 中 Canvas 样式的用法 在 Avalonia UI 框架中,`Canvas` 是一种布局面板,允许子元素通过绝对位置进行定位。这使得 `Canvas` 非常适合用于需要精确控制子元素位置的场景。 #### 创建并设置 Canvas 的基本样式 为了定义一个带有样式的 `Canvas`,可以在 XAML 文件中使用如下结构: ```xml <Window xmlns="https://github.com/avaloniaui" Title="Canvas Example"> <Canvas> <!-- 设置背景颜色 --> <Canvas.Background> <SolidColorBrush Color="#FFD700"/> </Canvas.Background> <!-- 添加矩形到画布上 --> <Rectangle Fill="Blue" Width="100" Height="100" Canvas.Left="50" Canvas.Top="50"/> <!-- 添加椭圆到画布上 --> <Ellipse Fill="Red" Width="80" Height="80" Canvas.Left="200" Canvas.Top="100"/> <!-- 使用绑定属性动态调整位置 --> <TextBlock Text="Dynamic Positioning" FontSize="16" Foreground="White"> <TextBlock.RenderTransform> <TranslateTransform X="{Binding DynamicX}" Y="{Binding DynamicY}"/> </TextBlock.RenderTransform> </TextBlock> </Canvas> </Window> ``` 上述代码展示了如何向 `Canvas` 添加不同类型的图形,并设置了它们的位置以及一些视觉效果[^3]。 #### 动态修改 Canvas 上的对象位置 除了静态设定对象的位置外,还可以利用数据绑定来实现更灵活的操作方式。例如,在 ViewModel 中声明两个可观察属性 (`DynamicX`, `DynamicY`) 来实时更新文本框的位置。 对于更加复杂的动画需求,则可以通过附加行为或者命令模式配合定时器等方式完成平滑过渡的效果。 #### 自定义绘图逻辑 如果希望进一步自定义绘制过程,比如绘制复杂路径或其他矢量图形,可以继承 `Control` 类并重写 `OnRender` 方法来自定义绘画逻辑。这种方式提供了极大的灵活性,适用于构建高度定制化的用户界面组件[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值