日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

可移动悬浮球的实现

發布時間:2025/4/9 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可移动悬浮球的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可移動懸浮球的實現

近期看到魅族的懸浮球功能,初步研究了下,實現了基本的功能。

?

一、Window 和WindowManger 的概念

Window:一個抽象類,具體實現在PhoneWindow。表示一個窗口的概念,Android中所有的View都是通過Window來顯示的,Actvity/Dialog/Toast中的View都是附加在Window上的——Window是View的直接管理者。View的事件是由Window傳遞給DecorView,然后DecorView傳遞給View;setContentView的底層也是通過Window來完成

WindowManger:Window的管理者。有三大接口 Window添加——addView,Window刪除——removeView,Window更新——updateViewLayout

?

二、使用WindowManger添加一個Window來實現懸浮效果

private void setFloatingButton() {mFloatingBtn = new Button(this);mFloatingBtn.setText("Suspend");mLayoutParams = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,0,0,PixelFormat.TRANSPARENT);mLayoutParams.flags =//本區域內的事件自己處理,本區域外的事件底層Window處理WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL//不獲取焦點,也不接收輸入事件| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE//可以顯示鎖屏界面| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;mLayoutParams.gravity = Gravity.LEFT | Gravity.TOP;mLayoutParams.x = 100;mLayoutParams.y = 300;//選用系統層級的Type,這樣Window會顯示在最頂層mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;//利用WindowManger添加一個WindowgetWindowManager().addView(mFloatingBtn, mLayoutParams);}

?

 三、懸浮球隨手指滑動的效果

首先,要先給懸浮球設置onTouchListener

mFloatingBtn.setOnTouchListener(this);

然后,在onTouch方法中,不斷更新View的位置即可,更新View位置使用了WindowManger的Window更新(updateViewLayout)方法

@Overridepublic boolean onTouch(View v, MotionEvent event) {int x = (int) event.getRawX();int y = (int) event.getRawY();switch (event.getAction()) {case MotionEvent.ACTION_DOWN:mLastX = x;mLastY = y;break;case MotionEvent.ACTION_MOVE:int deltaX = x - mLastX;int deltaY = y - mLastY;mLayoutParams.x = mLayoutParams.x + deltaX;mLayoutParams.y = mLayoutParams.y + deltaY;mWM.updateViewLayout(v, mLayoutParams);mLastX = x;mLastY = y;break;default:break;}return false;}

  

?

這樣,一個具備基本功能的懸浮球效果就實現了。

擴展:

1.給這個懸浮球賦予更豐富的功能

2.在懸浮球隨手指滑動的效果上做些動畫,提升滑動體驗

?

?

參考資料:《Android開發藝術探索》

? ? ? ? ? ? ? https://github.com/xerrard/SuspendedBall

轉載于:https://www.cnblogs.com/xerrard/p/4967711.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的可移动悬浮球的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。