Canvas学习总结

最近做一个小项目,被特效难住了,做一个总结吧,方便以后自己查看方便。


  1,在时钟圆盘上做一个动画,随着时间的流逝而移动;

2,在时钟圆盘上画一个已经有的图片drawble,让他随着手势的拖动而在圆盘外圆而拖动。

   首先我对canvas不熟练,所以懂额太少,很多人看了我写的可能觉得很小白,那没办法啦,请谅解。


以下是我的做法:

(1)首先建立一个自定义view的一个类,且extends  View implements OntuchListner{};


( 2)在你的acitivty中new此类的同时,将之前已经有的圆盘图片资源,自动滚动的图片资源,还有随着手势移动的图片资源,传到此类中,进行初始化。

(3)在自定义view的类中,重新ontuch方法和 Ondraw()方法,这2个方法是重点;

(4)在ontuch方法中,有3个监听方法,即MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE、MotionEvent.ACTION_UP这3个事件。在相应的事件中进行对应的操作,这个监听器是针对手势滑动的。


(5)如果想要调用Ondraw方法,那么就要调用方法postInvalidate();  之后他自然进入ondraw方法中进行绘制。

下面说一下Ondraw方法中对图片的绘制:Drawable.draw(Canvas),其中,Drawable为图片资源,他的意思是将此图片资源画在canvas上面,另外Drawable.setBounds(x1,y1,x2,y2),一般是在Drawable.draw(Canvas)方法之前进行,他的目的是限制此drawble显示的位置,参数是坐标,其中以界面左上角为原点(0,0),左边向下为y轴正方向,上面向右为x轴正方向,上面参数中,x1和y1是此图形的左上角在这个坐标系中的坐标值,x2和y2是此图形右下角的坐标值,如果此图形不是规则图形,那么就以涵盖此图形的矩形的左上角和右下角的坐标为准,这个坐标设置的是图形在界面上的显示位置的,而且还可以通过这四个参数对此图形进行压缩或者扩大。

(6)限定了图形资源的显示位置之后,调用Drawable.draw(Canvas),就显示出此图形,即在canvas上显示此图片资源。


二,首先看一下手势滑动的时候,手下的图片如何在规定的轨迹上进行滑动

(1)有ontuch方法的监听,根据滑动的dx和dy来计算滑动的角度变化,且计算出来,那么想让图片在一个圆圈的轨迹上进行滑动的话,就要知道此圆圈的坐标,那么每次调用ondraw方法时,为了使被按住图形随着手来滑动,其实不是图片来懂,而是canvas来动,这里用到了canvas.rotate(angle, x, y);方法。他的意思是,按照圆心坐标为x和y的点旋转angle度。这个是度数,而不是弧度,为int型变量,也就是前面通过dx和dy计算出来的滑动的变化角度。

(2)canvas滑动角度后,再画图片资源,即 Drawable.draw(canvas);,当然在此方法前可以使用Drawable.setBounds()函数先来固定位置。

三,让一个空间在圆圈的圆周上随着时间进行滑动,下面是实现方法

(1)其实和上面的实现方法一样的,只不过如果想要他一直自己自动滑动,写一个一直运行的线程,来调用ondraw方法,并且每次角度递增就可以了。



总:当然,canvas功能很强大,以上只是自己做的一个笔记,在开发使用过程中要注意的东西太多了,以后慢慢来总结吧,写了这么些还是对canvas理解的不够好。下一篇,会将代码贴上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值