[置顶] 仿新版QQ底部导航栏动态拖动按钮
2017-07-11 17:12
253 查看
首先要感谢这位大哥的分享:http://www.jianshu.com/p/fcbd86d2b73a。
新版QQ的底部按钮能拖动,跟随手势的位置做不同动画效果,很是有趣。
其实这种动画实现原理很简单,我们可以继承FrameLayout,添加1~2张图片,在onTouchEvent方法中移动。当然为了实现上述效果,两张图片移动的比例(或者阻尼值)是不同的,而且还要限制两张图片的移动范围。
新版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); }详细的过程,注释已经说的很清晰,大家可以下载源码看一看。
相关文章推荐
- Android 底部导航栏中间凸起、动态配置替换底部导航栏Tab图标(按钮、标签)的实现方案
- MFC无标题栏自绘对话框可拖动按钮三态仿QQ弹窗样式
- [置顶] Android项目导航栏之仿微信底部导航栏TabLayout+ViewPager+Fragment
- 实现按钮拖动到底部,与底部按钮互换的功能
- uc,qq底部按钮的一个解决方法
- 底部导航栏中间加按钮的简单解决
- 新版qq canvas 动态背景
- [置顶] 底部虚拟导航栏适配问题
- Android 底部导航栏按钮突出
- Android客制化------6.0底部导航栏增加隐藏按钮
- jQueryMobile新版中导航栏按钮消失的解决方法
- [置顶] Android仿今日头条首页的顶部标签栏和底部导航栏
- Android之framework修改底部导航栏NavigationBar动态显示和隐藏
- Android 自定义底部导航栏和动态添加fragment
- viewpager的setCurrentItem 底部导航栏点击按钮实现直接跳转,去掉滑动效果
- [置顶] xamarin android Fragment实现底部导航栏
- [置顶] iOS11 导航栏按钮位置问题的解决------新
- [置顶] xamarin android Fragment实现底部导航栏
- Android之framework修改底部导航栏NavigationBar动态显示和隐藏
- 实现底部导航栏中间凸起,(点击中间凸出按钮弹出菜单)