Android直播app送禮物連擊動畫效果(實例代碼)
更新時間:2017年07月12日 09:51:45 作者:yylyingy
最近在做公司的直播項目,需要實現(xiàn)一個觀看端連擊送禮物的控件,下面給大家分享實例代碼,需要的的朋友參考下吧
最近在做公司的直播項目,需要實現(xiàn)一個觀看端連擊送禮物的控件:
直接上代碼:
/**
* @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<View> 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);
}
/**
*<br> Description: todo(這里用一句話描述這個方法的作用)
*<br> Author: yangyinglong
*<br> 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) { }
//復(fù)用Item,當(dāng)一個View移除時將它放到池內(nèi)
@Override
public void onViewDetachedFromWindow(View view) {
if (giftViewCollection.size() < 5) {
giftViewCollection.add(view);
}
}
});
} else {
//如果Item池內(nèi)有緩存的view,將它取出來,并從池中刪除
view = giftViewCollection.get(0);
giftViewCollection.remove(view);
}
return view;
}
/**
*<br> Description: todo(這里用一句話描述這個方法的作用)
*<br> Author: yangyinglong
*<br> 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);/*設(shè)置view標(biāo)識*/
CustomRoundView crvheadimage = (CustomRoundView) giftView.findViewById(R.id.crvheadimage);
final MagicTextView giftNum = (MagicTextView) giftView.findViewById(R.id.giftNum);/*找到數(shù)量控件*/
TextView sender = (TextView) giftView.findViewById(R.id.sender);
sender.setText(tag);
giftNum.setText("x1");/*設(shè)置禮物數(shù)量*/
crvheadimage.setTag(System.currentTimeMillis());/*設(shè)置時間標(biāo)記*/
giftNum.setTag(1);/*給數(shù)量控件設(shè)置標(biāo)記*/
this.addView(giftView,0);/*將禮物的View添加到禮物的ViewGroup中*/
// llgiftcontent.invalidate();/*刷新該view*/
TranslateAnimation inAnim = (TranslateAnimation) AnimationUtils.loadAnimation(getContext(), R.anim.gift_in);
giftView.startAnimation(inAnim);/*開始執(zhí)行顯示禮物的動畫*/
inAnim.setAnimationListener(new Animation.AnimationListener() {/*顯示動畫的監(jiān)聽*/
@Override
public void onAnimationStart(Animation animation) { }
@Override
public void onAnimationEnd(Animation animation) {
//注釋調(diào),第一次添加沒動畫
// 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);/*找到數(shù)量控件*/
int showNum = (Integer) giftNum.getTag() + 1;
giftNum.setText("x"+showNum);
giftNum.setTag(showNum);
crvheadimage.setTag(System.currentTimeMillis());
new NumAnim().start(giftNum);
}
}
/**
* 數(shù)字放大動畫
*/
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禮物連擊動畫效果,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
您可能感興趣的文章:
- Android 實現(xiàn)仿網(wǎng)絡(luò)直播彈幕功能詳解及實例
- Android實現(xiàn)炫酷的網(wǎng)絡(luò)直播彈幕功能
- Android仿斗魚直播的彈幕效果
- Android自定義View模仿虎撲直播界面的打賞按鈕功能
- Android高級UI特效仿直播點(diǎn)贊動畫效果
- android實現(xiàn)直播點(diǎn)贊飄心動畫效果
- Android仿直播特效之點(diǎn)贊飄心效果
- Android控件實現(xiàn)直播App點(diǎn)贊飄心動畫
- Android貝塞爾曲線實現(xiàn)直播點(diǎn)贊效果
- Android實現(xiàn)直播聊天區(qū)域中頂部的漸變效果
相關(guān)文章
使用Android開發(fā)接入第三方原生SDK實現(xiàn)微信登錄
這篇文章主要介紹了使用Android開發(fā)接入第三方原生SDK實現(xiàn)微信登錄,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
listview的上滑下滑監(jiān)聽,上下滑監(jiān)聽隱藏頂部選項欄的實例
下面小編就為大家分享一篇listview的上滑下滑監(jiān)聽,上下滑監(jiān)聽隱藏頂部選項欄的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
解決android studio引用遠(yuǎn)程倉庫下載慢(JCenter下載慢)
這篇文章主要介紹了解決android studio引用遠(yuǎn)程倉庫下載慢(JCenter下載慢),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Android webView如何輸出自定義網(wǎng)頁
這篇文章主要介紹了Android webView如何輸出自定義網(wǎng)頁,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09
Android 使用Glide加載網(wǎng)絡(luò)圖片等比例縮放的實現(xiàn)方法
這篇文章主要介紹了Android 使用Glide加載網(wǎng)絡(luò)圖片等比例縮放的實現(xiàn)方法,需要的朋友可以參考下2018-08-08

