Android如何实现直播app送礼物连击动画效果

这篇文章将为大家详细讲解有关Android如何实现直播app送礼物连击动画效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的曲沃网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

最近在做公司的直播项目,需要实现一个观看端连击送礼物的控件:

直接上代码:

/**
 * @author yangyinglong on 2017/7/11 16:52.
 * @Description: todo(这里用一句话描述这个类的作用)
 * @Copyright Copyright (c) 2017 Tuandai Inc. All Rights Reserved.
 */
public class CustomGiftView extends LinearLayout {
  private Timer timer;
  private List giftViewCollection = new ArrayList<>();
  public CustomGiftView(Context context) {
    this(context,null);
  }
  public CustomGiftView(Context context, @Nullable AttributeSet attrs) {
    this(context, attrs,0);
  }
  public CustomGiftView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
    this(context, attrs, defStyleAttr,0);
  }
  public CustomGiftView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
  }
  /**
   *
 Description: todo(这里用一句话描述这个方法的作用)    *
 Author:   yangyinglong    *
 Date:    2017/7/11 17:40    */   public void pause() {     if (null != timer) {       timer.cancel();     }   }   public void cancel() {     if (null != timer) {       timer.cancel();     }   }   public void resume() {     clearTiming();   }   /**    * 定时清除礼物    */   private void clearTiming() {     TimerTask task = new TimerTask() {       @Override       public void run() {         int count = CustomGiftView.this.getChildCount();         for (int i = 0; i < count; i++) {           View view = CustomGiftView.this.getChildAt(i);           CustomRoundView crvheadimage = (CustomRoundView) view.findViewById(R.id.crvheadimage);           long nowtime = System.currentTimeMillis();           long upTime = (Long) crvheadimage.getTag();           if ((nowtime - upTime) >= 3000) {             final int j = i;             post(new Runnable() {               @Override               public void run() {                 CustomGiftView.this.removeViewAt(j);               }             }); //            removeGiftView(i);             return;           }         }       }     };     if (null != timer) {       timer.cancel();     }     timer = new Timer();     timer.schedule(task, 0, 100);   }   /**    * 添加礼物view,(考虑垃圾回收)    */   private View addGiftView() {     View view = null;     if (giftViewCollection.size() <= 0) {       /*如果垃圾回收中没有view,则生成一个*/       view = LayoutInflater.from(getContext()).inflate(R.layout.item_gift, null);       LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);       lp.topMargin = 10;       view.setLayoutParams(lp);       this.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {         @Override         public void onViewAttachedToWindow(View view) { }         //复用Item,当一个View移除时将它放到池内         @Override         public void onViewDetachedFromWindow(View view) {           if (giftViewCollection.size() < 5) {             giftViewCollection.add(view);           }         }       });     } else {       //如果Item池内有缓存的view,将它取出来,并从池中删除       view = giftViewCollection.get(0);       giftViewCollection.remove(view);     }     return view;   }   /**    *
 Description: todo(这里用一句话描述这个方法的作用)    *
 Author:   yangyinglong    *
 Date:    2017/7/11 16:54    * @param tag    */   public void showGift(String tag) {     View giftView = this.findViewWithTag(tag);     if (giftView == null) {/*该用户不在礼物显示列表*/       giftView = addGiftView();/*获取礼物的View的布局*/       giftView.setTag(tag);/*设置view标识*/       CustomRoundView crvheadimage = (CustomRoundView) giftView.findViewById(R.id.crvheadimage);       final MagicTextView giftNum = (MagicTextView) giftView.findViewById(R.id.giftNum);/*找到数量控件*/       TextView sender = (TextView) giftView.findViewById(R.id.sender);       sender.setText(tag);       giftNum.setText("x1");/*设置礼物数量*/       crvheadimage.setTag(System.currentTimeMillis());/*设置时间标记*/       giftNum.setTag(1);/*给数量控件设置标记*/       this.addView(giftView,0);/*将礼物的View添加到礼物的ViewGroup中*/ //      llgiftcontent.invalidate();/*刷新该view*/       TranslateAnimation inAnim = (TranslateAnimation) AnimationUtils.loadAnimation(getContext(), R.anim.gift_in);       giftView.startAnimation(inAnim);/*开始执行显示礼物的动画*/       inAnim.setAnimationListener(new Animation.AnimationListener() {/*显示动画的监听*/         @Override         public void onAnimationStart(Animation animation) { }         @Override         public void onAnimationEnd(Animation animation) {           //注释调,第一次添加没动画 //          giftNumAnim.start(giftNum);           Log.d("gao","" + CustomGiftView.this.getHeight());         }         @Override         public void onAnimationRepeat(Animation animation) { }       });     } else {/*该用户在礼物显示列表*/       for (int i = 0;i < CustomGiftView.this.getChildCount();i ++) {         if (giftView.equals(CustomGiftView.this.getChildAt(i))) {           if (i >= 3) {             CustomGiftView.this.removeView(giftView);           }         }       } //            llgiftcontent.addView(giftView,0);       CustomRoundView crvheadimage = (CustomRoundView) giftView.findViewById(R.id.crvheadimage);/*找到头像控件*/       MagicTextView giftNum = (MagicTextView) giftView.findViewById(R.id.giftNum);/*找到数量控件*/       int showNum = (Integer) giftNum.getTag() + 1;       giftNum.setText("x"+showNum);       giftNum.setTag(showNum);       crvheadimage.setTag(System.currentTimeMillis());       new NumAnim().start(giftNum);     }   }   /**    * 数字放大动画    */   public static class NumAnim {     private Animator lastAnimator = null;     public void start(View view) {       if (lastAnimator != null) {         lastAnimator.removeAllListeners();         lastAnimator.end();         lastAnimator.cancel();       }       ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "scaleX",0.7f, 1.5f,1f);       ObjectAnimator anim2 = ObjectAnimator.ofFloat(view, "scaleY",0.7f, 1.5f,1f);       AnimatorSet animSet = new AnimatorSet();       lastAnimator = animSet;       animSet.setDuration(500);       animSet.setInterpolator(new OvershootInterpolator());       animSet.playTogether(anim1, anim2);       animSet.start();     }   }   public static class GiftInfo {     private String senderFace;     private String senderNickName;     private String giftUrl;     private int giftID;     public String getSenderFace() {       return senderFace;     }     public void setSenderFace(String senderFace) {       this.senderFace = senderFace;     }     public String getSenderNickName() {       return senderNickName;     }     public void setSenderNickName(String senderNickName) {       this.senderNickName = senderNickName;     }     public String getGiftUrl() {       return giftUrl;     }     public void setGiftUrl(String giftUrl) {       this.giftUrl = giftUrl;     }     public int getGiftID() {       return giftID;     }     public void setGiftID(int giftID) {       this.giftID = giftID;     }   } }

关于“Android如何实现直播app送礼物连击动画效果”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


分享题目:Android如何实现直播app送礼物连击动画效果
标题网址:http://myzitong.com/article/ijjsds.html