桌面可移动View跟随Viewpager自动轮播,回到初始位置解决


MainActivity  中通过Viewpager 管理了四个Fragment,需求是在第一个Fragment(HomeFragment)中放置

HomeFramgment中找到控件,这里是一个button,

保存拖动过程的位置,在addOnLayoutChangeListener中重写设置,点击事件:保存按下的系统时间和抬起时系统时间,多少时间内算是点击事件。

成员位置

privateButtonbtnPrivilege;

private int[][]btnPosition= {new int[4]};


Fragment的onCreatView()方法中,(可抽取出去)

//这里获取屏幕的宽高

Display display = getActivity().getWindowManager().getDefaultDisplay();

Point point =newPoint();

display.getSize(point);

final intscreenWidth = point.x;

final intscreenHeight = point.y;

// 拖动的按钮

btnfloat= view.findViewById(R.id.btn_float);


// 给button添加触摸事件

View.OnTouchListener btnNewerPrivilegeTouchListener =newView.OnTouchListener() {

intlastX,lastY;// 记录移动的最后的位置

long startTouch;

long endTouch;

public booleanonTouch(View v,MotionEvent event) {

// 获取Action

intea = event.getAction();

switch(ea) {

caseMotionEvent.ACTION_DOWN:// 按下

lastX= (int) event.getRawX();

lastY= (int) event.getRawY();

startTouch= System.currentTimeMillis();

break;

/**

* layout(l,t,r,b) l Left position, relative to parent t Top

* position, relative to parent r Right position, relative to

* parent b Bottom position, relative to parent

* */

case MotionEvent.ACTION_MOVE:// 移动

// 移动中动态设置位置

intdx = (int) event.getRawX() -lastX;

intdy = (int) event.getRawY() -lastY;

intleft = v.getLeft() + dx;

inttop = v.getTop() + dy;

intright = v.getRight() + dx;

intbottom = v.getBottom() + dy;

if(left <0) {

left =0;

right = left + v.getWidth();

}

if(right >screenWidth) {

right =screenWidth;

left = right - v.getWidth();

}

if(top <0) {

top =0;

bottom = top + v.getHeight();

}

if(bottom >screenHeight) {

bottom =screenHeight;

top = bottom - v.getHeight();

}

v.layout(left,top,right,bottom);

// 将当前的位置再次设置

lastX= (int) event.getRawX();

lastY= (int) event.getRawY();

intleft1 = v.getLeft();

inttop1 = v.getTop();

btnPosition[0] =new int[]{left,top,right,bottom};

break;

caseMotionEvent.ACTION_UP:// 脱离

endTouch= System.currentTimeMillis();

if(endTouch-startTouch<=200) {

Intent intent =newIntent(getActivity(),BaseWebViewActivity.class);

intent.putExtra("url",NetConfig.HOME_NERNER_PRIVILEGE_URL);

startActivity(intent);

}

break;

}

return false;

}

};

btnfloat.setOnTouchListener(btnNewerPrivilegeTouchListener);

给button设置保存位置

view.addOnLayoutChangeListener((view1,i,i1,i2,i3,i4,i5,i6,i7) -> {

if(btnPosition[0][0] !=0) {

btnPrivilege.layout(btnPosition[0][0],btnPosition[0][1],btnPosition[0][2],btnPosition[0][3]);

}

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,790评论 0 33
  • 手势图片控件 PinchImageView 点击图片框架 photoView packagecom.example...
    Ztufu阅读 749评论 0 1
  • Button b =newButton(); b.setOnTouchListener(newView.OnTou...
    周晓风阅读 1,014评论 0 0
  • 4月,是我很喜欢的月份,不仅因为这时间是杭州难得的春天,更重要的是4月有我最喜欢的一个节日——4.23世界读书日。...
    叮个隆冬阅读 437评论 5 1
  • 1.客观现象存在,就是合理的,无视或者故意忽略客观存在的现象,根本第一步都迈不出去。 2.我们要去思考,导致这种现...
    我是孟祥勇阅读 240评论 0 0