一直比较喜欢即刻APP的交互效果,作为一个比较注重交互体验的安卓开发爱好者,自然不免会关注它的交互体验以及实现方式。其中的头像拖动效果一直让我觉得挺有意思:

https://www.zhihu.com/video/927920856120823808

头像拖动时会产生残影,拖动结束时残影也会慢慢消失。最初看到这种效果就被吸引了,一直沉迷于思考如何实现这种效果。但实在是太懒,经常思考出实现方式后就顿觉无味,失去兴趣,转而去沉迷下一个奇淫技巧了。最近忽然痛定思痛,决心也写点什么东西,抖点所谓的干货出来,分享于世,也不枉转行做了这么久的开发,首先想写的就是这种效果了。

拖动效果挺像游戏里的贪吃蛇的,所以我起了个名字 SnakeMaker,先看一下我做的效果:

跟即刻的效果基本上一致。下面来分享一下实现思路。

安卓开发中View的位置依赖于其父容器,因此也只能在其父容器限定的区域里显示。这样就带来一个问题:如果想要实现目标View在整个屏幕区域里拖动,其父容器的尺寸要和屏幕尺寸相同。但实际开发中,创建布局时,很多时候我们不能保证目标view的父容器和屏幕尺寸一样。那么有没有方法解决这个问题呢?

当然有解决的方式了。为了保证可以对Activity或Fragment的布局里的任何一个子view做出这种拖动效果,必须绕过上述的问题。如果我们不直接操作目标view,而是复制一个和目标view一摸一样的copyView,然后将copyView添加到一个和屏幕尺寸一样大的ViewGroup里,接着操作copyView的拖动,这样就不受目标view位置的限制了!没错,就是一种偷梁换柱,瞒天过海的方法。所以我得实现实现思路是这样子的:

1.当Activity或Fragment的布局加载完毕后,获取目标view的信息(尺寸,背景图,屏幕中的位置等)
2. 复制多个目标view。一个作为头,剩余的作为残影。
3.处理复制的view(残影透明度,监听绑定等),然后添加到指定的ViewGroup里(ViewGroup的尺寸最好覆盖整个屏幕,这样可以在整个屏幕里拖动)。
4.隐藏目标view,处理复制view的拖动效果。

以上便是整个实现思路。通过这样的处理,我们可以包装布局里任意一个子view,给其添加这种拖动效果。具体的代码细节就不讲了,上面步骤中没有太难实现的地方,重要的是分享思路。文后会给出github地址。简单看一下如何使用:

SnakeViewMaker snakeViewMaker = new SnakeViewMaker(MainActivity.this);
snakeViewMaker .addTargetView(imageView) // 绑定目标View.attachToRootLayout((ViewGroup) findViewById(R.id.root));// 绑定Activity/Fragment的根布局

attachToRootLayout(ViewGroup root)方法可以将这种效果绑定到任何一个指定的容器里(Linearlayout除外)。当然,如果不指定的话会默认绑定到Activity的根布局里(android.R.id.content)。

一个需要注意的地方是,如果目标view加载的图片是网络图片,在绑定目标view时,网络图片可能还没有加载完成,因此需要在网络图片加载完成后再对目标view绑定。

在我最近开发的两个app里,已经使用了这个效果,用下来感觉还不错,绝大部分场景都能完美实现。当然了,和即刻的效果相比,还是有一个特别细小的差别。等我有时间解决的这一细小差别,再来分享心得。

具体的API使用就不详写了,感兴趣的话欢迎去github上指教。源码也很简单,实现这样的效果不到四百行,如果你发现了问题,也欢迎指正。

文章同步发布在知乎专栏:https://zhuanlan.zhihu.com/p/32282647

guthub地址:https://github.com/devilist/SnakeViewMaker

SnakeMaker:模仿实现 即刻APP 头像拖动的残影效果相关推荐

  1. cad拖动有残影,在AUTOCAD拖动光标或图形时出现重影是怎么回事?

    问题现象: 当在AUTOCAD里画图的时候,拖动光标的时候,图形或光标出现重影. 或者已经移动或删除的图形仍然显示屏幕上直到缩放或平移后才消失. 有不少人都遇到了类似的问题,这个问题通常是显卡驱动或相 ...

  2. cad拖动有残影_LCD 残影问题分析及常见解决办法

    <LCD 残影问题分析及常见解决办法>由会员分享,可在线阅读,更多相关<LCD 残影问题分析及常见解决办法(2页珍藏版)>请在人人文库网上搜索. 1.LCD 残影问题分析及常见 ...

  3. cad拖动有残影_设置了透明以后,会有严重残影

    设置了透明以后,会有严重残影 Qt::NoDropShadowWindowHint 加上这个就可以了 我最后从Qt的源码中找到了答案 MaskWidget *MaskWidget::self = 0; ...

  4. matlab中鼠标光标后面的阴影怎么去除,UG在绘图是拖动鼠标出现残影怎么回事?看看这个方法就知道了...

    原标题:UG在绘图是拖动鼠标出现残影怎么回事?看看这个方法就知道了 情景一,绘制草图拖动有残影 最近有歌小伙伴在画草图时遇到拖动鼠标,坐标框会出现重叠残影的现象,基本如下图所示, 这大概率是鼠标回报率 ...

  5. android仿小米运动,GitHub - luciferldy/Bnimation: 模仿即刻 App 点赞与数字跳动效果,模仿小米运动首页转圈圈的烟花效果...

    Bnimation 现阶段实现了模仿即刻点赞效果以及数字跳动增长,小米运动首页烟花转圈圈(•̀⌄•́)效果. 即刻 即刻的点赞效果 下面是我实现的效果(最下为 TextView 自带的展示数字效果) ...

  6. 新浪微博回应热搜被暂停更新一周;即刻 APP 下架一年后恢复上线;Android 11 Beta 版发布| 极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  7. 即刻App产品分析报告

    即刻产品分析报告 一.前期描述 即刻是一款基于兴趣的信息推送工具,支持iOS和Android平台. 操作方便.简洁.易上手,相比较于网易新闻.腾讯新闻.今日头条等新闻客户端,即刻更具有倾向性,它可根据 ...

  8. 微信小程序模仿开眼视频app(一)——视频首页、视频详情、分类

    可到我的github账号上去copy文件 先展示一下我实现了的功能吧 提示,如果有出现无法加载域名之类问题的的,可以在"设置"-"项目设置"-打钩"不 ...

  9. 腾讯“立知”被指抄袭“即刻” APP,目前已被下线

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 据报道,腾讯近日上线了一款资讯阅读类 APP "腾讯立知",然而这款刚刚 ...

  10. UI设计:模仿淘宝App首页

    UI设计:模仿淘宝App首页

最新文章

  1. [NC21228]货币系统
  2. 【转载】插件自动升级
  3. 比特币钱包(5) BIP44 账户表示形式
  4. rocketmq集群安装部署过程(4.0.0版本)、安装中的常见问题举例
  5. Java的深度:通过协方差暴露的API泄漏
  6. 10天时间做出php,php 最近10天的所有日期
  7. 如何解决区块链钱包更新慢问题?
  8. 设计一个名为complex的类来表示复数_CAE必修课:结构动力优化设计_搜狐汽车
  9. c++解决哥德巴赫猜想问题/c++实现任一大于2的偶数都可以写为两个素数之和
  10. QWidget中的ChildAt()函数使用试验
  11. OpenCV-均值滤波cv::blur
  12. Bug--Tomcat Error start child
  13. [Http权威指南]1.Http概况
  14. H264/AVC协议基本概况
  15. 安装 MaxScale
  16. 下列叙述中正确的是计算机课,大学计算机课程练习题(期末)
  17. Computer Vision 杂志对何恺明 Rethinking ImageNet Pre-training 的最新评论
  18. 苹果cmsV10韩剧TV简约影视网站源码电脑和手机模板自适应
  19. python 命令行输入参数有误_python – 错误:参数太少,必须提供命令行包规范或–file...
  20. 我是什么情况下开始学python,现在能用python做什么

热门文章

  1. 《信号与系统学习笔记》—线性时不变系统(二)
  2. 积分简明笔记-第一类曲线积分的类型
  3. httpunit测试遭遇org.mozilla.javascript.NativeGlobal.constructError
  4. 我的世界光影Java优化_教程/提高帧率 - Minecraft Wiki,最详细的官方我的世界百科...
  5. sw4stm32开发stm32
  6. 电脑打印软件哪个好用?
  7. Qt 中利用 GNU barcode 生成一维条形码
  8. 【Java 常用类】java.util包(5)Date类的常用方法
  9. PMP_考前冲刺题(2022)(3A通过分享)(180题附答案及解析)
  10. R 修改安装包默认存放位置的方法