本文实例为大家分享了Android实现直播点赞效果的具体代码,供大家参考,具体内容如下
<>强效果展示强>
<强>原理分析强>
点赞效果最主要的难点和原理在于贝塞尔曲线动画的生成,我们通过图片主要讲解贝塞尔曲线动画
1,需要找到贝塞尔曲线的四个点
2,通过三级贝塞尔曲线的公式计算,获取贝塞尔曲线的轨迹路径点
3,通过设置点赞图片X, Y坐标,从而形成点赞的效果
<强> 强>
<>强实现步骤强>
1,初始化变量
//1,继承RelativeLayout 公共类ChristmasView扩展RelativeLayout实现视图。OnClickListener { 私人上下文语境;//2,准备几张点赞图片 私人int [] christmas_drawable={R.drawable。christmas01 R.drawable。christmas02, R.drawable.christmas03 ,R.drawable。christmas04 R.drawable。christmas05 R.drawable.christmas06};//随机数种子 私人随机随机=new随机();//视图的宽高 私人int宽度、高度;//图片的宽高 私人int drawableWidth drawableHeight; 公共ChristmasView(上下文语境){ 这(上下文,null); } 公共ChristmasView(上下文语境,AttributeSet attrs) { 这(上下文、attrs 0); } 公共ChristmasView(上下文语境、AttributeSet attrs int defStyleAttr) { 超级(上下文、attrs defStyleAttr); 这一点。上下文=上下文;//3、设置点击事件 setOnClickListener(这个);//4,获取点赞图片的宽高 可拉的可拉的=ContextCompat。getDrawable(上下文,R.drawable.christmas01); drawableWidth=drawable.getIntrinsicWidth (); drawableHeight=drawable.getIntrinsicHeight (); } } @Override 公共空间> 私人空间addChristmas(上下文语境){/* * * 1,点击一次增加一张图片在底部 */最后ImageView ImageView=new ImageView(上下文); imageView.setBackgroundResource (christmas_drawable [random.nextInt (christmas_drawable。长度- 1))); RelativeLayout。LayoutParams params=new LayoutParams (ViewGroup.LayoutParams.WRAP_CONTENT ViewGroup.LayoutParams.WRAP_CONTENT); params.addRule (ALIGN_PARENT_BOTTOM); params.addRule (CENTER_HORIZONTAL); imageView.setLayoutParams (params); addView (imageView);//2,开始执行点赞效果 AnimatorSet AnimatorSet=getAnimatorSet (imageView); animatorSet。addListener(新AnimatorListenerAdapter () { @Override 公共空间> 私人AnimatorSet getAnimatorSet (ImageView ImageView) { AnimatorSet输入=new AnimatorSet ();//1、缩放动画 AnimatorSet scaleAnimator=new AnimatorSet (); ObjectAnimatorα=ObjectAnimator。ofFloat (imageView,“阿尔法”,0.3 f, 1 f); ObjectAnimator scaleX=ObjectAnimator。ofFloat (imageView“scaleX”, 0.3 f, 1 f); ObjectAnimator写入scaleY=ObjectAnimator。ofFloat (imageView“写入scaleY”, 0.3 f, 1 f); scaleAnimator.setDuration (300); scaleAnimator。playTogether(αscaleX,写入scaleY);//2,贝塞尔动画 ValueAnimator bezierAnimator=getBezierAnimator (imageView);//3,两个动画按顺序播放 进入。playSequentially (scaleAnimator bezierAnimator); 返回输入; } >之前4,贝塞尔曲线动画
它需要一个估值器,不断的计算它的运行轨迹,从起始点到终点开始计算,当中也需要中间另外的两个点进行辅助计算,这些都是由贝塞尔曲线的公式所决定的
/* * *贝塞尔曲线估值器:计算动画的执行轨迹 * * @params传入贝塞尔曲线需要的四个点 * @return通过计算返回贝塞尔曲线的坐标 */公共类BezierEvaluator实现TypeEvaluator{ 私人PointF point1; 私人PointF卷帘窗; 公共BezierEvaluator (PointF point1, PointF卷帘窗){ 这一点。point1=point1; 这一点。卷帘窗=卷帘窗; } @Override 公共PointF评估(t,浮动PointF point0, PointF point3) { PointF点=new PointF ();//t取值为[0,1]/* * *三阶贝塞尔公式 * * B (t)=(1 - t) ^ 3 P0 * + 3 t (1 - t) ^ 2 P1 * t ^ 2 + 3 (1 - t) P2 * + t ^ 3 P3 */点。x=point0。x * (1 - t) * (1 - t) * (1 - t) + 3 * point1。x * t * (1 - t) * (1 - t) + 3 *卷帘窗。x * t * t * (1 - t) + point3。x * t * t * t;/* * *三阶贝塞尔公式 * * B (t)=(1 - t) ^ 3 P0 * + 3 t (1 - t) ^ 2 P1 * t ^ 2 + 3 (1 - t) P2 * + t ^ 3 P3 */点。y=point0。y * (1 - t) * (1 - t) * (1 - t) + 3 * point1。y * t * (1 - t) * (1 - t) + 3 *卷帘窗。y * t * t * (1 - t) + point3。y * t * t * t; 返回点; } } Android贝塞尔曲线实现直播点赞效果