博客
关于我
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/

你可能感兴趣的文章
multi-angle cosine and sines
查看>>
Mysql Can't connect to MySQL server
查看>>
mysql case when 乱码_Mysql CASE WHEN 用法
查看>>
Multicast1
查看>>
mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
查看>>
MySQL Cluster 7.0.36 发布
查看>>
Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
查看>>
MySQL Cluster与MGR集群实战
查看>>
multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
查看>>
mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
查看>>
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>