博客
关于我
Android 自定义View实现直播点赞特效
阅读量:707 次
发布时间:2019-03-21

本文共 2174 字,大约阅读时间需要 7 分钟。

#直播点赞特效View开发

##1.需求背景

随着直播行业的快速发展,观众互动成为直播观看体验的重要环节。在现有的点赞、评论功能基础上,开发带有视觉特效的点赞功能可以显著提升用户体验。本文将详细介绍如何开发一个类似直播点赞特效的需求。

##2.自定义View实现特效

为了实现点赞特效,我们需要自定义一个View,并通过动画实现红心的放大、透明度变化以及沿着预设轨迹移动的效果。

###2.1自定义View类实现思路

  • View基本结构:继承RelativeLayout,作为容纳点赞特效的布局基础。
  • 动画控制:使用动画框架实现缩放、透明度渐变以及贝塞尔曲线运动轨迹。
  • 特效逻辑:点击屏幕时触发特效,随机生成点赞标记并附带动画效果。

###2.2Xml布局文件

###2.3Activity代码

public class GivePraiseActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.givepraise_layout);    }}

##3.点赞特效动画实现

###3.1动画Step1:创建缩放和透明度动画

private void addAnimator(final ImageView imageView) {    ObjectAnimator alpha = ObjectAnimator.ofFloat(imageView, "alpha", 0.3f, 1f);    ObjectAnimator scaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 0.2f, 1f);    ObjectAnimator scaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 0.2f, 1f);    AnimatorSet set = new AnimatorSet();    set.setDuration(100);    set.playTogether(alpha, scaleX, scaleY);    set.setTarget(imageView);        set.addListener(new Animator.AnimatorListener() {        @Override        public void onAnimationEnd(Animator animation) {            startBzierAnimation(imageView);        }    });        set.start();}

###3.2动画Step2:贝塞尔曲线运动轨迹

private void startBzierAnimation(final ImageView iv) {    iv.setAlpha(0);    ValueAnimator anim = getBzierAnimator(iv);    anim.start();}

###3.3贝塞尔动画实现

private ValueAnimator getBzierAnimator(final ImageView iv) {    PointF[] points = getBezierPoints(iv);    BezierEvaluator evaluator = new BezierEvaluator(points[1], points[2]);    ValueAnimator anim = ValueAnimator.create();    anim.setTarget(iv);    anim.addUpdateListener(updateListener);    anim.setDuration(3000);    anim.setInterpolator(getRandomInterpolator());    anim.begin();    return anim;}

##4.估值器的运算

贝塞尔曲线由四个点参数化:

  • P0:点赞特效起始点,位于屏幕底边中心。
  • P1:随机选在屏幕下方一个点。
  • P2:随机选在屏幕上方一个点。
  • P3:点赞特效结束点,位于屏幕顶部。

动画过程中,通过线性插值计算点卡的位置:[P(t) = P0(1-t)^3 + 3P1 t(1-t)^2 + 3P2 t^2(1-t) + P3 t^3]

具体实现可参考贝塞尔曲线动画BezierEvaluator类。

##5.特效展示

点击屏幕后,系统将随机生成四个点赞标记并附带动画效果。标记将沿着自定义轨迹从起始位置放大到正常大小,随后以贝塞尔曲线运动至终点位置。

本实现通过结合Android动画框架和贝塞尔曲线算法,实现了一个流畅且有创意的点赞特效。

转载地址:http://dhgez.baihongyu.com/

你可能感兴趣的文章
Vue3+element plus+sortablejs实现table列表拖拽
查看>>
Nokia5233手机和我装的几个symbian V5手机软件
查看>>
non linear processor
查看>>
Non-final field ‘code‘ in enum StateEnum‘
查看>>
none 和 host 网络的适用场景 - 每天5分钟玩转 Docker 容器技术(31)
查看>>
None还可以是函数定义可选参数的一个默认值,设置成默认值时实参在调用该函数时可以不输入与None绑定的元素...
查看>>
NoNodeAvailableException None of the configured nodes are available异常
查看>>
Vue.js 学习总结(16)—— 为什么 :deep、/deep/、>>> 样式能穿透到子组件
查看>>
nopcommerce商城系统--文档整理
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NoSQL介绍
查看>>
NoSQL数据库概述
查看>>
Notadd —— 基于 nest.js 的微服务开发框架
查看>>
NOTE:rfc5766-turn-server
查看>>
Notepad ++ 安装与配置教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
Notepad++在线和离线安装JSON格式化插件
查看>>
notepad++最详情汇总
查看>>
notepad++正则表达式替换字符串详解
查看>>
notepad如何自动对齐_notepad++怎么自动排版
查看>>