android 红包雨源代码,Android 红包雨效果自定义控件

本文介绍了如何在Android中实现红包雨效果,通过自定义控件`FallingView`和`RedPackAnim`动画来模拟红包飘落。利用Path绘制动画轨迹,并通过适配器`IFallingAdapter`管理红包的样式、轨迹和数据。此外,还提供了复用机制以优化性能。
摘要由CSDN通过智能技术生成

cae18e7dd7ff

WX20201231-181616@2x.png

思路:利用Path绘制动画轨迹,再使用PathMeasure获取轨迹中的坐标位置实时改变view的坐标完成红包动画。

封装一个红包容器view用于管理大量红包view的显示、动画、消失、回收利用

package com.cj.customwidget.widget

import android.content.Context

import android.graphics.*

import android.os.Handler

import android.util.AttributeSet

import android.util.Log

import android.view.LayoutInflater

import android.view.View

import android.view.ViewGroup

import android.view.animation.Animation

import android.widget.FrameLayout

import androidx.annotation.LayoutRes

import androidx.core.view.children

/**

* File FallingView.kt

* Date 12/25/20

* Author lucas

* Introduction 飘落物件控件

* 规则:通过适配器实现

*/

class FallingView : FrameLayout, Runnable {

private val TAG = FallingView::class.java.simpleName

private var handlerTask = Handler()

private var iFallingAdapter: IFallingAdapter? = null

private var position = 0//当前item

private var fallingListener: OnFallingListener? = null

private var lastStartTime = 0L//最后一个item开始显示的延迟时间

private val cacheHolder = HashSet()//缓存holder,用于复用,减少item view创建的个数

constructor(context: Context) : super(context) {

initView(context, null)

}

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {

initView(context, attrs)

}

constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {

initView(context, attrs)

}

private fun initView(context: Context, attrs: AttributeSet?) {

// setWillNotDraw(false)//放开注释可显示辅助线

}

//开始飘落

fun startFalling() {

if (iFallingAdapter == null) {

Log.e(TAG, "iFallingAdapter not be null.")

return

}

position = 0

handlerTask.post(this)

}

//停止飘落

fun stopFalling() {

handlerTask.removeCallbacks(this)

//停止所有动画

children.forEach {

it

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值