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

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. Android(安卓)view的预加载占位效果
  3. Android(安卓)自定义loading
  4. webView头部加进度加载效果
  5. Android(安卓)SimpleAdapter显示ListView、GridView
  6. Android(安卓)Audio代码分析9 - AudioTrack::write函数
  7. Android常用代码集合
  8. Android:控件anim动画效果xml文件属性值含义
  9. Android自定义Dialog没有按设置的宽度显示的问题

随机推荐

  1. 闹钟AlarmAndMusic 和支持播放音乐效果的
  2. Android中view绘制常用知识
  3. Android中AIDL的实现使用
  4. Android(安卓)PullToRefresh下拉刷新控件
  5. IPC框架分析 Binder,Service,Service manag
  6. MediaPlayer实现带播放条的音乐播放和视
  7. Android(安卓)studio Android(安卓)Monit
  8. Android报表库aChartEngine系列
  9. 安卓启动流程
  10. Android面试题总结(二) java深入复习