放yy直播点赞动画

最近在做直播相关的东西,这个动画是IOS先撸出来的,后来android这边要模仿,大部分直播应用都有很炫酷的点赞动画,所以也没什么好稀奇的。如果有现成的轮子了,就没必要自己再造了,后来参照了程序亦非猿的实现,做了些修改,最终效果还不错。

live.gif

刚开始自己造轮子的时候也走了些弯路,最初是给这些图标一些随机的初始速度和偏移量然后慢慢上升,效果总是不大好,差了点意思。后来仔细研究发现这些图标上升的路线并不是直线,而是一个三阶贝塞尔曲线。

  一阶贝塞尔曲线,实际上就是一条连接两点的直线段。
  二阶贝塞尔曲线,就是两点间的一条抛物线,利用一个控制点来控制抛物线的形状。
  三阶贝塞尔曲线,则需要一个起点,一个终点,两个控制点来控制曲线的形状。

三节贝塞尔曲线的公式

公式.png

公式中:P0,是我们的起点,P3是终点,P1,P2是途径的两个点,而t则是一个因子,取值范围是0-1。
整个曲线的生成过程

过程.gif

实现代码如下,调用的时候只需要在构造方法中传入两个随机点即可。

    public class BesselEvaluator implements TypeEvaluator<float[]> {
        private float point1[] = new float[2], point2[] = new float[2];

        public BesselEvaluator(float[] point1, float[] point2) {
            this.point1 = point1;
            this.point2 = point2;
        }

        @Override
        public float[] evaluate(float fraction, float[] point0, float[] point3) {
            float[] currentPosition = new float[2];
            currentPosition[0] = point0[0] * (1 - fraction) * (1 - fraction) * (1 - fraction)
                    + point1[0] * 3 * fraction * (1 - fraction) * (1 - fraction)
                    + point2[0] * 3 * (1 - fraction) * fraction * fraction
                    + point3[0] * fraction * fraction * fraction;
            currentPosition[1] = point0[1] * (1 - fraction) * (1 - fraction) * (1 - fraction)
                    + point1[1] * 3 * fraction * (1 - fraction) * (1 - fraction)
                    + point2[1] * 3 * (1 - fraction) * fraction * fraction
                    + point3[1] * fraction * fraction * fraction;
            return currentPosition;
        }
    }

详细的动画实现可以参考一步一步教你实现Periscope点赞效果,但很显然我这里完成点赞动画,任务还没有完成。有几个问题需要解决:允许连续点赞,而且是计数的,什么时候把点赞的数量抛给服务器;我怎么看到其他用户点赞,或者其他用户怎么看的到我点赞。

先看第一个问题吧,什么时候把点赞数量抛给服务器?由于产品经理带着小姨子跑路了,Ios和android两个端的策略还不太一样,但我们达成的基本共识就是:不能点一次抛一次,抛的次数越少越好。Ios是本地维护一个count,没隔一段时间检测count有增加,就抛一次。android这里是连续点击的时间间隔大于一个约定值,就认为本轮点赞结束,然后抛一次。以前有研究过单击双击,这次连续点击也来了,该来的总要来的。

public class MainActivity extends AppCompatActivity {

    long mLastTime = 0;
    long mCurTime = 0;
    private final int DELAY = 500;//连续点击的临界点
    BubbleView bubbleView;
    private int mClickCount = 0;
    private int currLikeCount;
    private TextView likeCount;
    private Timer delayTimer;
    private TimerTask timeTask;

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            praiseRequest(mClickCount);
            delayTimer.cancel();
            super.handleMessage(msg);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        bubbleView=(BubbleView)findViewById(R.id.praise_anim);
        bubbleView.setDefaultDrawableList();
        likeCount = (TextView) findViewById(R.id.like_count);
        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                mCurTime = System.currentTimeMillis();
                if (mCurTime - mLastTime < DELAY) {
                    mClickCount++;
                } else {
                    mClickCount = 1;
                }
                currLikeCount++;
                likeCount.setText(String.valueOf(currLikeCount));
                delay();
                mLastTime = mCurTime;
                bubbleView.startAnimation(bubbleView.getWidth(), bubbleView.getHeight());
            }
        });
    }

    private void delay() {
        if (timeTask != null)
            timeTask.cancel();

        timeTask = new TimerTask() {
            @Override
            public void run() {
                Message message = new Message();
                mHandler.sendMessage(message);
            }
        };
        delayTimer = new Timer();
        delayTimer.schedule(timeTask, DELAY);
    }

    /**
     * 点赞请求网络
     */
    private void praiseRequest(int count) {

    }
}

第二个问题由于暂时没条件做推送,所以只能客户端每隔一段时间轮一次接口了,如果相比较上次数量有增加,动画上就弹出相应数量的爱心数,这里就需要给屏幕上允许出现的爱心数量设置一个最大值,要不然一瞬间弹出几百个甚至上千个肯定要悲剧了。

576DB36E-F179-47A0-A216-8C05381BCC94-1540-0000D86DB0CDA3D2.gif

后期将做进一步的拓展,实现详情效果

时间: 2024-08-03 08:48:22

放yy直播点赞动画的相关文章

Win7 64位系统下YY直播的麦克风没有声音如何解决

  一.直播麦克风没声音解决方法 1.首先确认一下你的麦克风能够被电脑识别,如果麦克风选择的选项里只有"主声音捕获驱动程序"的话,那就是说明你的麦克风还未被识别; 2.建议尝试关闭直播助手后再重新打开试试看; 3.还不行的话就要确认麦克风状态为"自由说话",并把麦克风音量调到最大,并检查是不是在直播的时候设置了静音. 二.yy直播没有游戏声音解决方法 1.首先确认是否在麦克风状态选择了"按下快捷键说话",如果是的话,请切换为"自由说话&

YY直播安全运维从“0”到“1”的实践

本文转载自:高效运维社区  作者:韩方 作者简介: 韩方,欢聚时代(YY直播)安全中心总监.公司T4技术专家,10年以上安全领域的攻防研究和设计开发工作,对于平台安全.应用安全.业务安全等安全领域有非常深入的研究,申请过多项安全领域相关技术专利,以及发表过多篇安全领域学术文章,多次参加安全领域技术峰会分享:曾先后主导设计和开发云防 DDOS 系统.分布式 Web 入侵防御系统.Linux 入侵防御系统.移动安全加固系统.外挂对抗系统.机器人识别挑战云服务等安全领域对抗和防御系统:熟悉互联网安全技

yy直播间怎么赚钱 yy直播间赚钱攻略

yy直播间怎么赚钱 很多朋友都经常会问,在YY上做主播真的赚钱吗?到底yy直播间怎么赚钱呢?今天就来和所有对这个问题好奇的朋友们,聊一下有关于多玩歪歪YY赚钱方法的问题,让所有对主播感兴趣的朋友们都能够充分的了解其中的奥妙. 在申请了超级偶像后,就可以自己开直播了.在这之前,要填写自己的资料,其中一项就是填写银行卡号.在之后的收入,都是进入所输入的银行账号中! 赚钱的途径有收礼物.开爵位.开守护等途径.其中,收到别人送的礼物,会自动转换为蓝钻,每月所得的蓝钻会按照一定的比例转换为RMB,所得的佣

yy直播助手怎么手游直播 yy直播助手手游直播教程

1.打开(yy直播助手)虎牙直播助手 然后利用yy来 登陆 2.我们在进入到界面之后选择我们自己的设备类型(如图2) 3.之后选择设备类型之后我们在打开界面填写直播信息与手机型号后,点击开始直播按钮                            4.进入直播间后,系统会弹出连接手机的两种方式提示.若此时已打开手游直播app则展示未连接的提示 5.插上数据线后,助手会自动连接并识别你的手机,等待识别手机之后就会进入到手机直播app上提示启动游戏.(若未打开手机直播app,该app将自动打开

解决yy直播助手麦克风没声音问题

YY直播助手麦克风没有声音怎么办 1)请确认你的麦克风能够被电脑识别,如果麦克风选择的选项里只有"主声音捕获驱动程序",说明你的麦克风还未被识别 2)尝试关闭直播助手后再重新打开 3)确认麦克风状态为"自由说话",并把麦克风音量调到最大 4)检查是不是在直播的时候设置了静音 我的直播为什么没有游戏声音? 答:1)请确认您是否在麦克风状态选择了"按下快捷键说话",如果是,请切换为"自由说话". 2)请确认您是否勾选了"

yy怎么开直播室?yy直播间怎么开?

1.我们先要在电脑中安装一个yy软件了,百度搜索到官方下载最新版本的. 2.然后登录之后我们点击如下图所示"我要直播" 进入了. 3.进入之后我们需要选择创建直播间的类型了,选择你要创建的类型点击进入. 4.类型选择发了我们点击"马上创建"如下图所示. 5.等待基础加载项完成,顶部是直播间的地址,可以告知他人,搜索来围观. 6.好了这样就己成功的创建了一个自己的yy直播间了. 7.现在我们就可以开始在这个yy直播间视频,聊天,教学之类的了哦.  

求教怎么在网页上调用yy直播

问题描述 最近公司然实现网页调用yy直播,刚接触编程不久希望大神帮下忙

YY直播间怎么赚钱 YY直播间赚钱方法详解

给各位YY软件的使用者们来详细的解析分享一下YY直播间赚钱的方法. 方法分享: 在申请了超级偶像后,就可以自己开直播了.在这之前,要填写自己的资料,其中一项就是填写银行卡号.在之后的收入,都是进入所输入的银行账号中!   赚钱的途径有收礼物.开爵位.开守护等途径.其中,收到别人送的礼物,会自动转换为蓝钻,每月所得的蓝钻会按照一定的比例转换为RMB,所得的佣金官方首先分50%,签约频道拿10%-20%,主播自己拿30%-40%不等.还有红钻,红钻和蓝钻的兑换比例是一样的,红钻是通过蓝钻转换或是其他

yy直播助手桌面捕捉使用方法图解

yy直播助手桌面捕捉功能的使用只在在直播中我们就可以进行操作了,我们只需要参考下面的办法来操作,细节如下 yy直播助手桌面捕捉使用方法 1.我们在界面中点击"桌面捕捉",点击开始直播,效果如下所示 2.之后我们再界面中点击"桌面捕捉设置"里填上游戏名称,点击确定后会加载直播工具条 3.点击直播工具条上绿色的按钮即可上传画面(红色区域内的画面即为桌面捕捉的画面),效果如下所示. 好了上面就是小编为各位整理的一关于yy直播助手桌面捕捉功能的一个细节了,希望这篇文章可以帮