iOS目前-20180209来说,桌面宠物是不可能实现的;
Android上面是可以实现的,那么我们就请出知乎的吉祥物 ->
@刘看山 :
1.显示
Android上在桌面上显示悬浮,大体上用的就是Service+WindowManager;
新建一个Service,添加一个WindowManager,设定好布局;
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); WindowManager.LayoutParams params = new WindowManager.LayoutParams(); params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; params.format = PixelFormat.RGBA_8888; params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.width = petW; params.height = petW; params.x = 0; params.y = 0; elfView.setVisibility(VISIBLE); wm.addView(elfView, params);刘看山就出现在了桌面上;
2,移动
按照原来在Windows上的经验,一个桌宠,最起码的标准是,拖来拖去,走闹跑跳;
而让悬浮体移动,简单来说只要重新设定坐标轴,更新窗口即可;
params.x =dx; params.y = dy; wm.updateViewLayout(elfView, params);那么,添加上拖拽动画后
0
当然,拖拽代码是全网通用的TouchListener拖拽;
case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); paramX = params.x; paramY = params.y; break; case MotionEvent.ACTION_MOVE: dx = (int) event.getRawX() - lastX; dy = (int) event.getRawY() - lastY; params.x = paramX + dx; params.y = paramY + dy; wm.updateViewLayout(elfView, params); break;同理,走路就是新开一个线程,做出出动画的同时,对坐标进行操作;
贴上一个刘看山走路+玩耍的视频吧:
0
3,进阶互动
这里我用的是14年左右,手机360的一个动画效果;
把360的那个小人拉上一个弹弓,发射出去清理缓存那个;
说白了,就是拖拽和移动的结合,捎带一点view的基础动画;
0
当时我还没毕业;
被一个创业公司拉去做苦力;
一个月给1800块;
cto玩手机看见了这个东西;
和我开玩笑说“来,我要这个效果”
我说“你给我一个月1万块我就做”
cto说“你要能做出来,我给你一个月一万”
一个月挣1万,大概是上大学时候的我的人生目标吧;
真怀念那时候;
不像现在,Android变成了过气行业;
人生目标变成了不失业-狗头;
放一个bug:
0
照例,我在知乎上弄的效果都是开源的,如果对源码感兴趣的同学,可以到
wuyongxiang/ScreenElfgithub.com/wuyongxiang/ScreenElf下载,自己添加功能玩;
如果只想下载刘看山玩玩,可以点这个下载,注意要在手机系统应用设置中,找到ScreenElf,允许开启悬浮窗,要不然什么都看不见
/**注意,因为应用根本没写界面,所以看起来像是闪退,所以一定要经过截图那三个步骤,因为Android手机现在默认就是不容许应用开悬浮的;
**/
欢迎大家积极给赞+star
其他在知乎上放的Android效果源码:
如何用代码画出一只齿轮?
QQ 未读消息的拖拽动态效果是如何实现的?
QQ上发送么么哒时候,弹出弹跳表情,是如何实现的?
一个人可以 DIY 出什么有意思的东西?
知乎网页登录背景的动画是怎么做出来的?
祥子:【Android源码分享】一个果冻质感弹性控件&高仿MIUI9时钟表盘
祥子:如何用安卓手机当做遥控器控制家里的非智能电器?