public class testView extends View { private Bitmap mBitmap = null; private Bitmap nBitmap = null; private float scaleX = 1.0f; private float scaleY = 1.0f; private float step = 0.0001f; public testView(Context context, AttributeSet attrs) { super(context, attrs); mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_pet_spirit); nBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_pet_spirit_lighting); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); scaleCanvas(canvas); invalidate(); } private void scaleCanvas(Canvas canvas) { scaleX += step; scaleY += step; Matrix matrix = new Matrix(); Paint paint = new Paint(); canvas.scale(scaleX, scaleY); canvas.drawBitmap(mBitmap, matrix, paint); canvas.drawBitmap(nBitmap, matrix, paint); } }
先上代码,代码入门级!主要分享(1)canvas动画原理(2)应用场景(3)硬件加速兼容的bug
为金秀等地区用户提供了全套网页设计制作服务,及金秀网站建设行业解决方案。主营业务为做网站、网站设计、金秀网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!canvas动画原理:
画布初始大小一定,要通过scale,rotate,translate变化画布大小,角度,位移。在变化后的canvas上绘制想要的内容,内容也就跟着相应的变化。刚开始还以为是要先在canvas上绘制一边,在对canvas变形,这种误区刚开始会困惑很多人。其实canvas的draw方法是将绘制的内容画在变形后的画布上。原理是这样的:每次调用ondraw后都将获得一个新的canvas,这个canvas是一个满屏的区域,如果在刚获得这个canvas后就进行绘制,绘制的内容是立刻就显示出来了,但之后再进行变形后,canvas并不会自行进行绘制,如果在变形后在进行一次绘制,这时图像就重复了。
应用场景:
为什么要用canvas进行变形呢,如果我们用一串图片实现相应的动画,这时就会有大量的内存为题需要考虑。而canvas的变形方式使用的都是native方法,所以自然快,方便。而调用ondraw进行动画效果绘制现在应用在各种view插件上面的是比较多的。各种点击动画效果。
硬件加速兼容的bug:
clipPath()
clipRegion()
drawPicture()
drawTextOnPath()
drawVertices()
这几个方法在调用前一定要确定你已经在调用的activity中关闭了硬件加速,修改manifest
android:hardwareAccelerated="false"。否则你将会发现截取屏幕中的rgb时是有颜色的,可是屏幕一片惨白(幽灵绘制)
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。