桌面可移動View跟隨Viewpager自動輪播,回到初始位置解決


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

HomeFramgment中找到控件,這里是一個button,

保存拖動過程的位置,在addOnLayoutChangeListener中重寫設置,點擊事件:保存按下的系統(tǒng)時間和抬起時系統(tǒng)時間,多少時間內(nèi)算是點擊事件。

成員位置

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:// 移動

// 移動中動態(tài)設置位置

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]);

}

});

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗。 張土汪:刷leetcod...
    土汪閱讀 12,890評論 0 33
  • 手勢圖片控件 PinchImageView 點擊圖片框架 photoView packagecom.example...
    Ztufu閱讀 803評論 0 1
  • Button b =newButton(); b.setOnTouchListener(newView.OnTou...
    周曉風閱讀 1,045評論 0 0
  • 4月,是我很喜歡的月份,不僅因為這時間是杭州難得的春天,更重要的是4月有我最喜歡的一個節(jié)日——4.23世界讀書日。...
    叮個隆冬閱讀 478評論 5 1
  • 1.客觀現(xiàn)象存在,就是合理的,無視或者故意忽略客觀存在的現(xiàn)象,根本第一步都邁不出去。 2.我們要去思考,導致這種現(xiàn)...
    我是孟祥勇閱讀 289評論 0 0

友情鏈接更多精彩內(nèi)容