Android自定義View實現(xiàn)抖音飄動紅心效果
本文實例為大家分享了Android自定義View實現(xiàn)抖音飄動紅心效果的具體代碼,供大家參考,具體內(nèi)容如下
自定義View——抖音飄動紅心
效果展示
動畫效果
使用自定義view完成紅心飄動效果

View實現(xiàn)
動畫:屬性動畫(位移+縮放+透明度+旋轉(zhuǎn))
+
隨機數(shù):(屬性動畫參數(shù)+顏色選取)
View
/**
* 飄心效果
* 1.創(chuàng)建ImageView
* 2.ImageView執(zhí)行組合動畫
* 3.動畫執(zhí)行完成后銷毀View
*/
public class FlyHeartView extends RelativeLayout {
private int defoutWidth = 200;//默認(rèn)控件寬度
private long mDuration = 3000;//默認(rèn)動畫時間
//顏色集合 從中獲取顏色
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)建一個心形的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í)行動畫
* 在展示調(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í)行動畫
animatorSet.start();
//銷毀view
animatorSet.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
removeView(heartIv);
}
});
}
/**
* 橫向正弦位移動畫
*
* @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;
}
/**
* 縱向加速位移動畫
*
* @return
*/
private Animator createTranslationY(View view) {
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "translationY", 0, -1000);
animator.setDuration(mDuration);
animator.setInterpolator(new AccelerateInterpolator());
return animator;
}
/**
* 加速放大動畫
*
* @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;
}
/**
* 透明度動畫
*
* @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)動畫
*
* @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()方法就能實現(xiàn)點擊飄心效果。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android藍(lán)牙服務(wù)查找附近設(shè)備分析探索
這篇文章主要介紹了Android藍(lán)牙服務(wù)實現(xiàn)查找附近設(shè)備,了解內(nèi)部原理是為了幫助我們做擴展,同時也是驗證了一個人的學(xué)習(xí)能力,如果你想讓自己的職業(yè)道路更上一層樓,這些底層的東西你是必須要會的2023-01-01
Android Studio設(shè)置主題與字體大小圖文教程
這篇文章通過圖文詳細(xì)的給大家介紹了Android Studio中如何設(shè)置主題與字體大小,文章介紹的非常詳細(xì),相信對大家學(xué)習(xí)使用Android Studio具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。2016-10-10
Android編程開發(fā)之EditText實現(xiàn)輸入QQ表情圖像的方法
這篇文章主要介紹了Android編程開發(fā)之EditText實現(xiàn)輸入QQ表情圖像的方法,涉及Android多媒體文件及EditText的相關(guān)操作技巧,需要的朋友可以參考下2015-12-12

