Android(安卓)动画实现弹幕效果
16lz
2021-01-25
Android 动画实现弹幕效果
弹幕库可以用bilibili的弹幕库实现,但是此文不是
原理是采用 ObjectAnimator 移动View做出效果
ObjectAnimator.ofFloat(mDanmuLayout002, "translationX", SCREEN_WIDTH, -SCREEN_WIDTH)
核心代码就这一块
/** * 初始化弹幕控件 */private fun initDanmakuView() { mStartBtn.setOnClickListener { startDanMu() } mStopBtn.setOnClickListener { stopDanMu() } // mDanmu001Listener = object : MainAnimListener() { override fun onAnimationRepeat(animator: Animator) { super.onAnimationRepeat(animator) setDanmuContent(mDanmuLayout001, mDanmuTv001) } } mDanmu002Listener = object : MainAnimListener() { override fun onAnimationRepeat(animator: Animator) { super.onAnimationRepeat(animator) setDanmuContent(mDanmuLayout002, mDanmuTv002) } } mDanmu003Listener = object : MainAnimListener() { override fun onAnimationRepeat(animator: Animator) { super.onAnimationRepeat(animator) setDanmuContent(mDanmuLayout003, mDanmuTv003) } } // setDanmuContent(mDanmuLayout001, mDanmuTv001) setDanmuContent(mDanmuLayout002, mDanmuTv002) setDanmuContent(mDanmuLayout003, mDanmuTv003) // mAnim001 = ObjectAnimator.ofFloat(mDanmuLayout001, "translationX", SCREEN_WIDTH, -SCREEN_WIDTH) .apply { duration = RandomUtil.getNum(12_000, 20_000).toLong() repeatMode = ValueAnimator.RESTART repeatCount = ValueAnimator.INFINITE addListener(mDanmu001Listener) } mAnim002 = ObjectAnimator.ofFloat(mDanmuLayout002, "translationX", SCREEN_WIDTH, -SCREEN_WIDTH) .apply { duration = RandomUtil.getNum(12_000, 20_000).toLong() repeatMode = ValueAnimator.RESTART repeatCount = ValueAnimator.INFINITE addListener(mDanmu002Listener) } mAnim003 = ObjectAnimator.ofFloat(mDanmuLayout003, "translationX", SCREEN_WIDTH, -SCREEN_WIDTH) .apply { duration = RandomUtil.getNum(12_000, 20_000).toLong() repeatMode = ValueAnimator.RESTART repeatCount = ValueAnimator.INFINITE addListener(mDanmu003Listener) }}private fun setDanmuContent(cardView: CardView, tv: TextView) { cardView.setBackgroundResource(Constants.DANMU_BG[RandomUtil.getNum(Constants.DANMU_BG.size)]) cardView.background.alpha = Constants.DANMU_ALPHA tv.text = Constants.DANMU_CONTENT[RandomUtil.getNum(Constants.DANMU_CONTENT.size)]}
代码中引用了常用工具类库
implementation 'com.blankj:utilcode:1.26.0'
录制软件用的"闪电GIF制作软件" 要钱的,我没付费所以有水印
源码Github
更多相关文章
- 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
- Android(安卓)view的预加载占位效果
- Android(安卓)自定义loading
- webView头部加进度加载效果
- Android(安卓)SimpleAdapter显示ListView、GridView
- Android(安卓)Audio代码分析9 - AudioTrack::write函数
- Android常用代码集合
- Android:控件anim动画效果xml文件属性值含义
- Android自定义Dialog没有按设置的宽度显示的问题