`

canvas学习(八):圆角矩形

阅读更多

这一篇用canvas画个圆角矩形,什么是圆角矩形呢,先上个效果图:

再来个绘制的分析图(注:鼠标所在的位置为(0,0),r为边角圆形的半径,width为整个矩形的宽度,height为高度,以下的各个坐标为圆形的圆心坐标):

实现代码:

window.onload=function(){
var myCanvas = document.getElementById("myCanvas");//获取canvas对象
if(myCanvas.getContext("2d")){//判断浏览器是否支持canvas标签
	//设置canvas的宽度和高度
	myCanvas.width=800;
	myCanvas.height=600;

	var context = myCanvas.getContext("2d");//获取画布context的上下文环境
	//绘制一个圆角矩形
	strokeRoundRect(context,150,50,500,500,50);
	
	//绘制并填充一个圆角矩形
	//fillRoundRect(context,150,50,500,500,50);		
}else{
	alert("您的浏览器不支持canvas,请换个浏览器试试");
}
};


/**该方法用来绘制一个有填充色的圆角矩形
*@param cxt:canvas的上下文环境
*@param x:左上角x轴坐标
*@param y:左上角y轴坐标
*@param width:矩形的宽度
*@param height:矩形的高度
*@param radius:圆的半径
*@param fillColor:填充颜色
**/
function fillRoundRect(cxt,x,y,width,height,radius,/*optional*/fillColor){
	//圆的直径必然要小于矩形的宽高		
	if(2*radius>width || 2*radius>height){return false;}
	
	cxt.save();
	cxt.translate(x,y);
	//绘制圆角矩形的各个边
	drawRoundRectPath(cxt,width,height,radius);
	cxt.fillStyle=fillColor||"#000";//若是给定了值就用给定的值否则给予默认值
	cxt.fill();
	cxt.restore();
}


/**该方法用来绘制圆角矩形
*@param cxt:canvas的上下文环境
*@param x:左上角x轴坐标
*@param y:左上角y轴坐标
*@param width:矩形的宽度
*@param height:矩形的高度
*@param radius:圆的半径
*@param lineWidth:线条粗细
*@param strokeColor:线条颜色
**/
function strokeRoundRect(cxt,x,y,width,height,radius,/*optional*/lineWidth,/*optional*/strokeColor){
	//圆的直径必然要小于矩形的宽高		
	if(2*radius>width || 2*radius>height){return false;}
	
	cxt.save();
	cxt.translate(x,y);
	//绘制圆角矩形的各个边
	drawRoundRectPath(cxt,width,height,radius);
	cxt.lineWidth = lineWidth||2;//若是给定了值就用给定的值否则给予默认值2
	cxt.strokeStyle=strokeColor||"#000";
	cxt.stroke();
	cxt.restore();
}

function drawRoundRectPath(cxt,width,height,radius){
	cxt.beginPath(0);
	//从右下角顺时针绘制,弧度从0到1/2PI
	cxt.arc(width-radius,height-radius,radius,0,Math.PI/2);

	//矩形下边线
	cxt.lineTo(radius,height);

	//左下角圆弧,弧度从1/2PI到PI
	cxt.arc(radius,height-radius,radius,Math.PI/2,Math.PI);

	//矩形左边线
	cxt.lineTo(0,radius);

	//左上角圆弧,弧度从PI到3/2PI
	cxt.arc(radius,radius,radius,Math.PI,Math.PI*3/2);

	//上边线
	cxt.lineTo(width-radius,0);

	//右上角圆弧
	cxt.arc(width-radius,radius,radius,Math.PI*3/2,Math.PI*2);

	//右边线
	cxt.lineTo(width,height-radius);
	cxt.closePath();
}

根据这个圆角矩形再来绘制一个2048小游戏的棋盘,效果图如下:

在window.onload方法中添加如下代码:

//绘制一个2048的棋盘格
fillRoundRect(context,150,50,500,500,10,"#bbaba0");
//绘制16个小的棋盘

for(var i=0;i<4;i++){
	for(var j=0;j<4;j++){
		//170=150+20:150是棋盘左上角的x坐标,20为棋盘边线到四周各个色块的间距,也是棋盘中16个色块之间的间距
		//120=100+20:100是小色块的宽度,20为间距
		fillRoundRect(context,170+i*120,70+j*120,100,100,6,"#ccc0b3");
	}
}

 最后,感谢老师的分享! 

  • 大小: 4.3 KB
  • 大小: 26.2 KB
  • 大小: 3.7 KB
分享到:
评论
1 楼 xm3530 2018-03-29  
感谢,很好,很强大,谢谢分享。给节约不少时间呢!

相关推荐

    android 使用canvas把矩形图片变成圆角矩形显示

    以下是一个简单的示例,展示如何创建一个自定义的ImageView,将加载的矩形图片转化为圆角矩形: ```java public class RoundCornerImageView extends ImageView { private float cornerRadius; public ...

    制作正圆角的button1,正圆角矩形的绘画方法

    说明:正圆角矩形的绘画方法 核心技术:Delphi6 Canvas Google搜索:Delphi6 Canvas RoundRect,Round Corner,Canvas.Ellipse(),Canvas.Rectangle(),ROUND()

    详解微信小程序canvas圆角矩形的绘制的方法

    圆角矩形与一般矩形的区别在于,前者的四个角都是圆弧,所以只需要将一般矩形的四个角切掉,换成圆弧即可,如下图就是一个一般矩形被切掉了四个角的样子: 很明显,切掉了四个角的矩形,剩下其实就是四条 line ,...

    JavaScript canvas绘制圆角矩形.html

    Canvas 中文名称叫“画布”,它是游戏中所有UI组件的“容器”。一个场景中,可以允许多个Canvas对象的存在,还允许Canvas之间可以进行“嵌套”使用。需要注意的是,场景中的任何一个UI对象,都肯定是某个Canvas对象...

    Android利用canvas画各种图形(点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形)

    10. **圆角矩形(Rounded Rectangle)**:`canvas.drawRoundRect()`方法允许你绘制具有圆角的矩形,需要提供矩形的边界和圆角半径。 在实际开发中,通常会创建一个自定义的View类,重写`onDraw()`方法,在其中使用...

    android圆角矩形进度条

    首先,创建一个`RectF`对象来定义进度条的边界,然后通过`canvas.drawRoundRect()`方法绘制圆角矩形。圆角可以通过设置`RectF`的左上角和右下角的圆角半径来控制。 3. **进度条颜色**: 我们可以通过设置`paint....

    Android 图片,圆角矩形或圆形显示

    7. 绘制:使用Canvas对象的drawBitmap()方法,传入调整后的Bitmap、Paint和目标位置,绘制出圆角矩形图片。 对于更复杂的圆形图片,我们可以省略设置RectF的步骤,直接将Bitmap的宽度和高度设置为相同,这样...

    带箭头的圆角矩形菜单

    标题中的“带箭头的圆角矩形菜单”是指一种UI设计元素,它结合了箭头指示方向和圆角矩形的美观性,通常用于应用或网站的导航菜单。这样的菜单能够提供清晰的视觉引导,增强用户体验。实现这种菜单通常需要自定义...

    Android-RoundRectLayout圆角矩形的绘制方案解决任意圆角和圆形图片

    圆角矩形的绘制主要通过`Canvas`类提供的`drawRoundRect()`方法完成。该方法接收一个矩形区域和圆角半径作为参数,根据这两个参数在画布上绘制出具有指定圆角的矩形。在自定义布局中,我们需要重写`onDraw()`方法,...

    Android开发使用自定义View将圆角矩形绘制在Canvas上的方法

    Android开发使用自定义View将圆角矩形绘制在Canvas上的方法 Android开发中,使用自定义View将圆角矩形绘制在Canvas上是一种常见的需求。本文将详细介绍使用自定义View将圆角矩形绘制在Canvas上的方法,并结合实例...

    2.20 arc,圆弧和圆角矩形|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列课程

    2.20_arc,圆弧和圆角矩形|canvas曲线的绘制(圆弧和贝塞尔曲线)|Canvas图形、动画、游戏开发从入门到精通全系列

    QML--Canvas画布实现矩形圆形等圈定

    通过学习和熟练掌握这些API,开发者可以打造出极具创意的QML应用程序。 在`draw-canvas`这个文件夹中,可能包含了示例代码或者资源文件,帮助开发者更深入地了解如何在QML中使用Canvas进行图形绘制。通过阅读和实践...

    圆形变圆角矩形的微交互

    在Android开发中,自定义View...总结来说,"圆形变圆角矩形的微交互"是一个展示自定义View和动态动画的好例子,通过学习和实践,开发者可以提升自己的Android UI设计能力,为应用程序创造更丰富的视觉效果和交互体验。

    圆角矩形和圆形ImageView的实现

    对于圆角矩形ImageView,我们可以创建一个新的类继承自ImageView,并在onDraw()方法中使用Canvas的drawRoundRect()方法。这个方法接受六个参数:矩形的左上角坐标、宽度、高度以及四个圆角的半径。通过设置合适的...

    Android开发基于Drawable实现圆角矩形的方法

    在draw方法中,我们使用Canvas类来绘制圆角矩形。Canvas类提供了多种绘制方法,包括drawRect、drawCircle、drawText等。在本例中,我们使用drawRoundRect方法来绘制圆角矩形。 drawRoundRect方法需要四个参数:left...

    HTML5 canvas画圆角框

    如果想要绘制圆角矩形,我们需要使用`beginPath()`, `moveTo()`, `lineTo()`, `arcTo()`等方法配合使用。 首先,我们需要创建一个canvas元素并获取其2D渲染上下文: ```html &lt;canvas id="myCanvas" width="400" ...

    JQUERY圆角矩形

    除了使用插件,还可以利用 Canvas API 或 SVG 来实现圆角矩形效果。Canvas 提供了绘制图形的方法,包括 `arcTo()` 函数来创建曲线路径,而 SVG 是一种矢量图形标准,可以直接定义带有圆角的矩形元素。 jQuery 动画...

    jQuery Canvas Rounded Corners - jQuery圆角插件

    Canvas提供了一个画布,通过JavaScript可以在这个画布上绘制任意形状,包括圆角矩形。对于不支持CSS3圆角的浏览器,Canvas成为了一种强大的替代方案。 在使用该插件时,首先需要引入必要的依赖文件。在提供的文件...

Global site tag (gtag.js) - Google Analytics