Android自定義View實(shí)現(xiàn)抖音飄動(dòng)紅心效果
本文實(shí)例為大家分享了Android自定義View實(shí)現(xiàn)抖音飄動(dòng)紅心效果的具體代碼,供大家參考,具體內(nèi)容如下
自定義View——抖音飄動(dòng)紅心
效果展示
動(dòng)畫(huà)效果
使用自定義view完成紅心飄動(dòng)效果
View實(shí)現(xiàn)
動(dòng)畫(huà):屬性動(dòng)畫(huà)(位移+縮放+透明度+旋轉(zhuǎn))+隨機(jī)數(shù):(屬性動(dòng)畫(huà)參數(shù)+顏色選取)
View
/** * 飄心效果 * 1.創(chuàng)建ImageView * 2.ImageView執(zhí)行組合動(dòng)畫(huà) * 3.動(dòng)畫(huà)執(zhí)行完成后銷毀View */public class FlyHeartView extends RelativeLayout { private int defoutWidth = 200;//默認(rèn)控件寬度 private long mDuration = 3000;//默認(rèn)動(dòng)畫(huà)時(shí)間 //顏色集合 從中獲取顏色 private int[] color = { 0xFFFF34B3, 0xFF9ACD32, 0xFF9400D3, 0xFFEE9A00, 0xFFFFB6C1, 0xFFDA70D6, 0xFF8B008B, 0xFF4B0082, 0xFF483D8B, 0xFF1E90FF, 0xFF00BFFF, 0xFF00FF7F }; public FlyHeartView(Context context) { super(context); initFrameLayout(); } public FlyHeartView(Context context, AttributeSet attrs) { super(context, attrs); initFrameLayout(); } private void initFrameLayout() { ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(defoutWidth, ViewGroup.LayoutParams.WRAP_CONTENT); setLayoutParams(params); } /** * 創(chuàng)建一個(gè)心形的view視圖 */ private ImageView createHeartView() { ImageView heartIv = new ImageView(getContext()); LayoutParams params = new LayoutParams(defoutWidth / 2, defoutWidth / 2); //控件位置 params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); params.addRule(RelativeLayout.CENTER_HORIZONTAL); heartIv.setLayoutParams(params); heartIv.setImageResource(R.mipmap.ic_heart); //改變顏色 heartIv.setImageTintList(ColorStateList.valueOf(color[(int) (color.length * Math.random())])); return heartIv; } /** * 執(zhí)行動(dòng)畫(huà) * 在展示調(diào)用該方法 */ public void startFly() { final ImageView heartIv = createHeartView(); addView(heartIv); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.play(createTranslationX(heartIv)).with(createTranslationY(heartIv)).with(createScale(heartIv)).with(createRotation(heartIv)).with(createAlpha(heartIv)); //執(zhí)行動(dòng)畫(huà) animatorSet.start(); //銷毀view animatorSet.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);removeView(heartIv); } }); } /** * 橫向正弦位移動(dòng)畫(huà) * * @return */ private Animator createTranslationX(View view) { ObjectAnimator animator = ObjectAnimator.ofFloat(view, 'translationX', 0, (float) (defoutWidth * Math.random() / 4)); animator.setDuration(mDuration); //CycleInterpolator cycles 正弦曲線數(shù) animator.setInterpolator(new CycleInterpolator((float) (3 * Math.random()))); return animator; } /** * 縱向加速位移動(dòng)畫(huà) * * @return */ private Animator createTranslationY(View view) { ObjectAnimator animator = ObjectAnimator.ofFloat(view, 'translationY', 0, -1000); animator.setDuration(mDuration); animator.setInterpolator(new AccelerateInterpolator()); return animator; } /** * 加速放大動(dòng)畫(huà) * * @return */ private Animator createScale(View view) { ObjectAnimator animatorX = ObjectAnimator.ofFloat(view, 'scaleX', 1, 1.5f); ObjectAnimator animatorY = ObjectAnimator.ofFloat(view, 'scaleY', 1, 1.5f); AnimatorSet animatorSet = new AnimatorSet(); animatorSet.setDuration(mDuration); animatorSet.setInterpolator(new AccelerateInterpolator()); animatorSet.play(animatorX).with(animatorY); return animatorSet; } /** * 透明度動(dòng)畫(huà) * * @return */ private Animator createAlpha(View view) { ObjectAnimator animator = ObjectAnimator.ofFloat(view, 'alpha', 1, 0.1f); animator.setDuration(mDuration); animator.setInterpolator(new AccelerateInterpolator()); return animator; } /** * 旋轉(zhuǎn)動(dòng)畫(huà) * * @return */ private Animator createRotation(View view) { ObjectAnimator animator = ObjectAnimator.ofFloat(view, 'rotation', 0, (float) (25f * Math.random())); animator.setDuration(mDuration); animator.setInterpolator(new CycleInterpolator((float) (6 * Math.random()))); return animator; }}
最后在MainActivity中調(diào)用FlyHeartView 的startFly()方法就能實(shí)現(xiàn)點(diǎn)擊飄心效果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 天貓精靈能聽(tīng)QQ音樂(lè)嗎2. cdr怎么轉(zhuǎn)換成ICO文件3. 微信發(fā)朋友圈如何讓指定的人看到4. 新浪微博評(píng)論先審后放功能在哪 微博評(píng)論審核通過(guò)才顯示怎么弄5. 抖音評(píng)論什么時(shí)候可以恢復(fù)?抖音評(píng)論功能關(guān)閉怎么回事6. 抖音拒收的快遞怎么申請(qǐng)退款7. 天貓客服人工服務(wù)電話介紹8. 抖音上假如我年少有為不自卑懂得什么是珍貴是什么歌?完整版歌詞分享9. 抖音手機(jī)號(hào)被別人綁定了解綁教程介紹【圖】10. 在知乎里怎么發(fā)文章?知乎里發(fā)文章的方法介紹
