View视图跟随手指移动

之前 看过跟多App在页面中都有一个浮动的按钮,可以随意的在屏幕中拖动 释放后自动贴在屏幕边缘,这个效果其实很简单 就是onTouchEvent事件,在事件中分别处理Down,move,up事件即可。
先看效果图:

为了防止浮动按钮超出屏幕,还需要和屏幕宽高进行实时比对,以下方法是获取屏幕的宽高:

WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); mWidth = wm.getDefaultDisplay().getWidth(); mHeight = wm.getDefaultDisplay().getHeight();


在复写view的onTouchEvent事件


@Override public boolean onTouchEvent(MotionEvent event) {int x = (int) event.getX(); int y = (int) event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getX(); lastY = (int) event.getY(); break; case MotionEvent.ACTION_MOVE: mParams = (LinearLayout.LayoutParams) getLayoutParams(); offsetX = getLeft() + x - lastX; offsetY = getTop() + y - lastY; if (offsetX <= 0) { offsetX = 0; }if (offsetX + DensityUtil.dip2px(mContext, getDpValue()) >= mWidth) { offsetX = mWidth - DensityUtil.dip2px(mContext, getDpValue()); }if (offsetY <= 0) { offsetY = 0; }if (offsetY + DensityUtil.dip2px(mContext, getDpValue() + 25) >= mHeight) { //25是状态栏的高度 offsetY = mHeight - DensityUtil.dip2px(mContext, getDpValue() + 25); }mParams.leftMargin = offsetX; mParams.topMargin = offsetY; setLayoutParams(mParams); break; case MotionEvent.ACTION_UP:if (offsetX > mWidth / 2) { mParams.leftMargin = mWidth - DensityUtil.dip2px(mContext, getDpValue()); } else { mParams.leftMargin = 0; } mParams.topMargin = offsetY; setLayoutParams(mParams); break; }return true; }private int getDpValue() { return 50; //布局的宽高大小 }

【View视图跟随手指移动】
以上便是浮动按钮跟随手指滑动的全部逻辑代码


使用:


我是源码

View视图跟随手指移动
文章图片


    推荐阅读