Canvas绘图与动画详解

1、canvas 绘制

      当canvas不设置大小时,默认宽300,高150;

      注意:不建议使用css 设置大小,可以利用行内样式 width="",height=""去设置(无单位);

                canvas 是基于状态进行绘制的;

     举例说明:

     

     上述代码显示结果为全部均为黑色;

      如何更改? 在绘制前context.beginPath(),结束后 context.closePath();

练习: 七巧板

      

        <script>
             var tangram = [
                     { p:[{x:0,y:0},{x:800,y:0},{x:400,y:400}],color:‘#caff67‘},
                     { p:[{x:0,y:0},{x:400,y:400},{x:0,y:800}],color:‘#67becf‘},
                     { p:[{x:800,y:0},{x:800,y:400},{x:600,y:600},{x:600,y:200}],color:‘#ef3d61‘},
                     { p:[{x:600,y:200},{x:600,y:600},{x:400,y:400}],color:‘#f9f51a‘},
                     { p:[{x:400,y:400},{x:600,y:600},{x:400,y:800},{x:200,y:600}],color:‘#a594c0‘},
                     { p:[{x:200,y:600},{x:400,y:800},{x:0,y:800}],color:‘#fa8ecc‘},
                     { p:[{x:800,y:400},{x:800,y:800},{x:400,y:800}],color:‘#f6ca29‘}
                 ]
                 window.onload = function(){
                           var canvas = document.getElementById(‘clock‘);
                            // canvas.width,canva.height
                            canvas.width = 800;
                            canvas.height = 800;

                             //使用context进行绘制
                             var context = canvas.getContext(‘2d‘);
                             for(var i=0;i<tangram.length;i++){
                                     draw(tangram[i],context);
                               }
                      }

                       function draw(piece,ctx){
                                ctx.beginPath();
                                ctx.moveTo(piece.p[0].x,piece.p[0].y);
                                for(var i=1;i<piece.p.length;i++){
                                       ctx.lineTo(piece.p[i].x,piece.p[i].y);
                                  }
                                 ctx.closePath();

                                ctx.fillStyle=piece.color;
                                 ctx.fill();
                          }
             </script>

     注意: beginPath 与 closePath不一定要成对出现;beginPath代表重新规划一个新路线;

closePath表示要结束当前的路径,如果没有封闭会自动封闭上;其对于fill()没有用

原文地址:https://www.cnblogs.com/sunqq/p/10419568.html

时间: 2024-11-08 02:03:22

Canvas绘图与动画详解的相关文章

Android基础入门教程——8.3.1 三个绘图工具类详解

Android基础入门教程--8.3.1 三个绘图工具类详解 标签(空格分隔): Android基础入门教程 本节引言: 上两小节我们学习了Drawable以及Bitmap,都是加载好图片的,而本节我们要学习的绘图相关的 一些API,他们分别是Canvas(画布),Paint(画笔),Path(路径)!本节非常重要,同时也是我们 自定义View的基础哦~好的,话不多说开始本节内容~ 官方API文档:Canvas:Paint:Path: 1.相关方法详解 1)Paint(画笔): 就是画笔,用于设

Animation动画详解(六)——ValueAnimator高级进阶(二)

前言:人生总有不平时,无论何时,不后悔就好. 相关文章: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法>2.<Animation动画详解(二)--Interpolator插值器>3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画>4.<Animation动画详解(四)--ValueAnimator基本使用&

&quot;MindManager&quot;学习iOS系列之&quot;CAAnimation-核心动画&quot;详解,让你的应用“动”起来。

"MindManager"学习iOS系列之"CAAnimation-核心动画"详解,思维导图内展示了CAAnimation-核心动画的大多数基本功能和知识,每个part都有代码讲解,展示出CAAnimation-核心动画的清晰轮廓,编者提供了"JPG"."SWF"."PDF"."Word"."Mmap"格式的源文件供给使用.注意:JPG格式仅为图片总览,SWF格式使用

android旋转动画和平移动画详解,补充说一下如果制作gif动画放到csdn博客上

先上效果图: 我这里用的是GifCam来制作的gif动画,可以在http://download.csdn.net/detail/baidu_nod/7628461下载, 制作过程是先起一个模拟器,然后把GifCam的框拖到模拟器上面,点击Rec的new先,然后点击Rec,然后就save到本地成gif文件 这里做一个左右旋转,上下旋转,和左右移动的动画,先自己建立一个View的类,作为操作的对象: public class MyView extends View { private Paint m

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

iOS动画详解(学习动画看这一篇就够了)

iOS动画详解(学习动画看这一篇就够了) 一.基础知识 CAAnimation.png 二.CABasicAnimation 1. 动画的属性和解释 2.属性值的解释 repeatCount : 如果在swift中需要一直不断重复:Float.infinity,OC:HUGE_VALF timingFunction: timingFunction.png kCAMediaTimingFunctionLinear--在整个动画时间内动画都是以一个相同的速度来改变.也就是匀速运动.一个线性的计时函数

android动画详解四 创建动画

· 使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合,ValueAnimator 使你可以对这些类型的值进行动画.你需通过调用ValueAnimator 的某个工厂方法来获得一个ValueAnimator 对象,比如:ofInt(), ofFloat(), 或 ofObject().例如: ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration

Animation动画详解(十一)——layoutAnimation与gridLayoutAnimation

前言:人或许天生是懒惰的,明知道的不足,却不努力弥补. 相关博客: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法> 2.<Animation动画详解(二)--Interpolator插值器> 3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画> 4.<Animation动画详解(四)--ValueAnima

Android Animation动画详解(二): 组合动画特效

前言 上一篇博客Android Animation动画详解(一): 补间动画 我已经为大家介绍了Android补间动画的四种形式,相信读过该博客的兄弟们一起都了解了.如果你还不了解,那点链接过去研读一番,然后再过来跟着我一起学习如何把简单的动画效果组合在一起,做出比较酷炫的动画特效吧. 一. 动画的续播 如题,大家想想,如果一个页面上包含了许多动画,这些动画要求按顺序播放,即一个动画播放完成后,继续播放另一个动画,使得这些动画具有连贯性.那该如何实现呢? 有开发经验或者是逻辑思维的人肯定会想,对