仿新版QQ底部导航栏动态拖动按钮
来源:互联网 发布:管家婆软件打印机关闭 编辑:程序博客网 时间:2024/05/18 21:07
首先要感谢这位大哥的分享:http://www.jianshu.com/p/fcbd86d2b73a。
新版QQ的底部按钮能拖动,跟随手势的位置做不同动画效果,很是有趣。
其实这种动画实现原理很简单,我们可以继承FrameLayout,添加1~2张图片,在onTouchEvent方法中移动。当然为了实现上述效果,两张图片移动的比例(或者阻尼值)是不同的,而且还要限制两张图片的移动范围。
@Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); int action = event.getAction(); switch (action) { case MotionEvent.ACTION_MOVE: { changeWhenMove(x, y); return true; } case MotionEvent.ACTION_UP: { //复位 restorePosition(); //判断手抬起时坐标是否在相应按钮内,是则触发点击事件 if (isContain(this, event.getRawX(), event.getRawY())) { setHasClick(!hasClick); if (OnMenuClickListener != null) { OnMenuClickListener.onItemClick(this); } } return true; } } return true; } private boolean isContain(View view, float x, float y) { int[] point = new int[2]; view.getLocationOnScreen(point); return x >= point[0] && x <= (point[0] + view.getWidth()) && y >= point[1] && y <= (point[1] + view.getHeight()); } private void changeWhenMove(float x, float y) { //这个值可以调节来达到最理想的效果 if (y + centerY < -18 * centerY) { y = -18 * centerY - centerY; } else if (y - centerY > 18 * centerY) { y = 18 * centerY + centerY; } if (x + centerX < -12 * centerX) { x = -12 * centerX - centerX; } else if (x - centerX > 12 * centerX) { x = 12 * centerX + centerX; } childView1.setX(childView1X + (x - centerX) / 30);//外部动作小一点 childView1.setY(childView1Y + (y - centerY) / 60); if (childView2 != null) { childView2.setX(childView2X + (x - centerX) / 10);//内部动作可以大一点 childView2.setY(childView2Y + (y - centerY) / 30); } } private void restorePosition() { childView1.setX(childView1X); childView1.setY(childView1Y); childView2.setX(childView2X); childView2.setY(childView2Y); }详细的过程,注释已经说的很清晰,大家可以下载源码看一看。
阅读全文
1 0
- 仿新版QQ底部导航栏动态拖动按钮
- 仿qq底部Tab导航
- 仿qq底部Tab导航
- 仿 QQ 底部 tab 导航
- Fragment+自定义RadioButton实现底部导航栏,仿QQ
- # 仿QQ底部导航栏的自定义view
- 仿QQ新浪主界面底部导航与中间按钮点击弹出以及返回键点击返回效果
- ios开发——仿新版QQ侧滑导航栏的实现
- ios开发——仿新版QQ侧滑导航栏的实现
- 仿新版QQ锁屏下弹窗
- 仿新版QQ锁屏下弹窗
- Android 底部导航栏中间凸起、动态配置替换底部导航栏Tab图标(按钮、标签)的实现方案
- 【AmazeUI】底部导航栏与分享按钮
- Android 底部导航栏按钮突出
- 侧滑导航栏---仿qq
- 仿QQ导航菜单
- 仿QQ导航菜单
- 仿QQ导航菜单
- 获取 input[type=date]的值value
- android瑞士军刀:busybox
- 批量柱编号
- js与oc做交互的一个demo
- 关于eclipse解决java前台往后台传值乱码问题
- 仿新版QQ底部导航栏动态拖动按钮
- 【Photoshop】Photoshop 64Bit与Camera Raw安装包
- DescriptionResourcePathLocationType AbsRequestEvent cannot be resolved to a typeLogViewRequ
- java 判断两个数是否异号
- Q119:PBRT-V3,“复合重要性采样”(13.10章节)
- css优先级
- 经常被问的问题-jvm优化
- springMVC 多文件上传
- 【二叉树】层次遍历