背景:

随便短视频和直播行业的发展,创作者与浏览者之间存在一定的互动,这些互动表现形式很多,最常见的属于动画。

动画:

Android的动画分为三种:接下来我会简单的进行介绍,大家可以自行去查阅资料

View Animation(视图动画)

Drawable Animation(帧动画)

Property Animation(属性动画)

1.

视图动画,也叫Tween(补间)动画可以在一个视图容器内执行一系列简单变换(位置、大小、旋转、透明度)。譬如,如果你有一个TextView对象,您可以移动、旋转、缩放、透明度设置其文本,当然,如果它有一个背景图像,背景图像会随着文本变化。

补间动画通过XML或Android代码定义,建议使用XML文件定义,因为它更具可读性、可重用性。

2.属性动画

Android 3.0以后引入了属性动画,属性动画可以轻而易举的实现许多View动画做不到的事,上面也看见了,View动画无非也就做那几种事情,别的也搞不定,而 属性动画就可以的,譬如3D旋转一张图片。其实说白了,你记住一点就行,属性动画实现原理就是修改控件的属性值实现的动画。

3.帧动画

Drawable动画其实就是Frame动画(帧动画),它允许你实现像播放幻灯片一样的效果,这种动画的实质其实是Drawable,所以这种动画的XML定义方式文件一般放在res/drawable/目录下。中间是一组动画资源

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    <item
        android:drawable="@drawable/slv_ca_1"
        android:duration="100" />


</animation-list>

 思路:大家都知道点赞出现的动画是一连串的,并不是一个。我们经常用的都是单个view绑定一个动画,无法达到动画连赞效果。

连赞:连赞的思路就是不停的追加新的view进入parent中,

Android 动画集合,抖音快手点赞动画视频点赞方案AnimationSet 和 AnimatorSet_属性动画

parent可以是一个viewGroup,常用的我们可以重写 extends RelativeLayout;

由于parent是一个容器,我们只需要处理好动画集合即可,并对动画进行监听。

1.动画资源集合:常见的有不同的drawable

2.创建动画view,ImageView img=new ImageView(mContext);

     

addView(img);
//event通过获取parent ontouch(View v,MotionEvent event)获取
//设定位置
img.setX(event.getX());
img.setY(event.getY());
//设置view大小,
ime.setLayoutParents();
//准备好动画
Animation anm=getAnmation(img);
anm.addListener(
 
new AnimatorListenerAdapter(){
 
public void onAnimationEnd(Animator animation) {

 
//动画结束,移除当前视图,避免资源过多,导致内存溢出
 
post(new Runnable() {
    @Override
    public void run() {
        removeView(imageView);
    }
});
 
}
 
}
 
);//监听结束需要移除动画 
anm.start();

核心:

1.view的坐标

2.动画的:动画的组合

AnimationSet 和 AnimatorSet

AnimationSet :同时执行

AnimatorSet:

1.animatior.playTogether(anim1, anim2...);// 并行,同时执行

2.animatior.playSequentially(an1,an2,an3,an4...);// 有序队列执行

3.考虑内容溢出:动画结束需要removeView(view),把不再显示的view给销毁了,否则一直往内存中添加,导致OOM

4.动画:自行设计

5.坐标:view的坐标setX(),setY*();

Android 动画集合,抖音快手点赞动画视频点赞方案AnimationSet 和 AnimatorSet_android_02

设置(X,Y )的坐标,其实是左边顶部的坐标,left-Top-Point,并不是重心坐标点。在处理的时候需要注意一下,

Android 动画集合,抖音快手点赞动画视频点赞方案AnimationSet 和 AnimatorSet_帧动画_03

A=(x,y) B=(x+width,y),C(x,y+height),D(x+width,y+height),

重心点E(x+width/2,t+height/2)