即刻app 点赞效果实现

*即刻点赞效果的实现
思路:每次点赞数字的动画效果是根据变化的数字去做动画,例如1001 点赞只有末尾的1变化了所以只有1这个数字会有动画效果
1099 如果点赞就会变成1100 变化了三个数字 099 就会变为100 才会有动画效果.*
这里写图片描述

我们把变化前的数字和变化后的数字的每一位保存到集合里面
   //变化前的文本集合
   private void setListBeforeText(long number){
       listBeforeText.clear();
       long textNumber = number;
       while (textNumber/10 != 0){
           listBeforeText.add((textNumber % 10)+"");
           textNumber = textNumber/10;
       }
       listBeforeText.add((textNumber % 10)+"");
   }


   //变化后的文本集合
   private void setListAfterText(long number){
       listAfterText.clear();
       long textNumber = number;
       while (textNumber/10 != 0){
           listAfterText.add((textNumber % 10)+"");
           textNumber = textNumber/10;
       }
       listAfterText.add((textNumber % 10)+"");
   }

比较两个变化的文本集合找出变化的文本 和没有变化的文本
我们已1099->1100为例子
//找出变化的文本信息
    private String[] compareText(){
        setListBeforeText(beforeNumber);
        setListAfterText(number);
        StringBuilder sb = new StringBuilder();//找出不一样的文本 1099 -> 1100 就会保存100
        StringBuilder sbEquals = new StringBuilder();//找出一样的文本1099->1100 会保存1
        StringBuilder sb1 = new StringBuilder();//找变化文本初始数字的文本1099->1100 会保存099
        int count = listBeforeText.size() <= listAfterText.size() ? listBeforeText.size():listAfterText.size();
        for(int i = 0; i < count; i++){
            if(!listAfterText.get(i).equals(listBeforeText.get(i))){
                sb.append(listAfterText.get(i));
                sb1.append(listBeforeText.get(i));
            }else{
                sbEquals.append(listAfterText.get(i));
            }
        }
        for(int i = count; i < listAfterText.size(); i++){
            sb.append(listAfterText.get(i));
        }
    //以数组的形式返回1 100  099    
       // Log.d("LikeView",sbEquals.reverse().toString()+"  not equal: "+sb.reverse().toString());
        return new String[]{sbEquals.reverse().toString(),sb.reverse().toString(),sb1.reverse().toString()};
    }

下面就开始绘制数字1099->1100 099->变化为100
 private void drawNumber(Canvas canvas){
        String[] strs = compareText();
        float width = 0;
        if(!TextUtils.isEmpty(strs[0])){//绘制没有变化的文本 1
            width = paint.measureText(strs[0],0,strs[0].length());
            canvas.drawText(strs[0],95,100,paint);
        }

        if(!TextUtils.isEmpty(strs[1])){//绘制变化后的文本100 高度根据属性动画 做动画效果
            canvas.drawText(strs[1]+"",95+width,currentTextY,paint);
        }
        if(!TextUtils.isEmpty(strs[2])){//绘制099 099会随着文本100的高度的变化而变化 移动出控件范围外不可见 作为一个顶起的效果
            if(isLike){
                canvas.drawText(strs[2]+"",95+width,currentTextY+120,paint);
            }else{
                canvas.drawText(strs[2]+"",95+width,currentTextY-120,paint);
            }

        }
    }

项目地址 https://github.com/gacmy/dianzan.git

猜你喜欢

转载自blog.csdn.net/gacmy/article/details/78352670