一、View属性动画
View属性动画指的是可以对View的属性值进行平滑的过渡动画,包括移动、缩放、旋转和透明度等效果。以下为一个View平移的动画实现示例:
// 将View在x轴方向上平移500个像素 ObjectAnimator.ofFloat(view, "translationX", 0, 500).setDuration(500).start();
在这个实现示例中,我们让view在x轴方向上平移500个像素,动画执行时间为0.5秒。
利用View属性动画,我们可以自定义多种效果,灵活使用来绘制动画。但是其实现较为复杂,使用需要一定的技巧。
二、帧动画
帧动画也叫逐帧动画,是指通过一系列的图片依次播放来呈现动态效果的一种动画形式。以下为一个帧动画实现示例:
// 获取动画资源 AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.loading_anim); // 将动画资源设置为ImageView的背景 imageView.setBackground(animationDrawable); // 开始动画 animationDrawable.start();
在这个实现示例中,我们使用了一组图片来实现Loading的效果。通过设置图片序列帧并循环播放来满足我们的显示效果。
帧动画易于制作和使用,但是相对于属性动画而言,它消耗的资源较大。在使用过程中需要使用较小的图片尺寸,减小GPU渲染负担,提高动画的执行效率。
三、补间动画
补间动画是一种用来实现视图的平移、缩放、旋转以及透明度等动画效果的一种方式。以下为一个补间动画实现示例:
// 初始化一个补间动画对象 TranslateAnimation translateAnimation = new TranslateAnimation(0, 500, 0, 0); // 设置动画的执行时间为1秒 translateAnimation.setDuration(1000); // 开始动画 view.startAnimation(translateAnimation);
在这个实现示例中,我们通过初始化一个TranslateAnimation对象来实现View的水平平移,动画执行时间为1秒。
补间动画的优势在于其易于使用和制作,在实现简单动画效果方面具有较好的效果,但是缺点是其整个动画是按照均速直线运动的,所以可能有些动画效果要比属性动画呈现的效果差一些。
四、属性动画
属性动画是使用动画运动流畅方式直接调整视图属性值来实现动画效果的一种方式。以下为一个属性动画实现示例:
// 将View在x轴方向上平移500个像素 view.animate().translationX(500).setDuration(500).start();
在这个实现示例中,我们让View在x轴方向上平移500个像素。通过View的animate方法生成一个动画控制器来实现平滑的运动过渡效果。
属性动画具有使用方便、时序性强等优势,可以较好的实现基本的动画效果。
五、转场动画
转场动画,又叫场景转换动画,是指在两个Activity或者Fragment之间进行平滑过渡的一种动画方式。以下为一个转场动画实现示例:
// 执行Activity切换动画 ActivityOptionsCompat activityOptionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, view, "image_transition"); Intent intent = new Intent(this, OtherActivity.class); startActivity(intent, activityOptionsCompat.toBundle());
在这个实现示例中,我们利用ActivityOptionsCompat的makeSceneTransitionAnimation方法来创建一个特效场景动画效果,并将预订Destination View的共享元素名称(View的transitionName属性值)传入Intent启动器中,实现View动画过渡。
转场动画具有视觉效果强、动画连续性好等特点,但是其需要你在两个相邻的场景之间明确指定过渡动画,导致使用门槛较高。
六、SVG动画
SVG(Scalable Vector Graphics,可缩放矢量图形)动画,是指基于矢量图形文件制作的动画效果。以下为一个SVG动画实现示例:
// 获取SVG动画文件 SVG svg = SVGParser.getSVGFromAsset(getAssets(), "anime_alien.svg"); // 将SVG动画文件设置为ImageView的背景 imageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); imageView.setImageDrawable(svg.createPictureDrawable());
在这个实现示例中,我们首先获取SVG动画文件,并将其设置为ImageView的背景。
SVG动画具有矢量图形特性,可以进行任意缩放和平移等操作,使用方便。但是其实现方式较为特殊,需要使用SVG解析器解析SVG文件并生成Drawable对象,使用较为复杂。