亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

android 添加隨意拖動(dòng)的桌面懸浮窗口

2020-04-11 12:40:36
字體:
供稿:網(wǎng)友
用過新版本android 360手機(jī)助手都人都對 360中只在桌面顯示一個(gè)小小懸浮窗口羨慕不已吧?
其實(shí)實(shí)現(xiàn)這種功能,主要有兩步:
1.判斷當(dāng)前顯示的是為桌面。這個(gè)內(nèi)容我在前面的帖子里面已經(jīng)有過介紹,如果還沒看過的趕快穩(wěn)步看一下哦。
2.使用windowManager往最頂層添加一個(gè)View
.這個(gè)知識(shí)點(diǎn)就是為本文主要講解的內(nèi)容哦。在本文的講解中,我們還會(huì)講到下面的知識(shí)點(diǎn):
a.如果獲取到狀態(tài)欄的高度
b.懸浮窗口的拖動(dòng)
c.懸浮窗口的點(diǎn)擊事件
有開始之前,我們先來看一下效果圖:
 
接下來我們來看看FloatView的代碼:
復(fù)制代碼 代碼如下:

public class FloatView extends ImageView{
private float mTouchX;
private float mTouchY;
private float x;
private float y;
private float mStartX;
private float mStartY;
private OnClickListener mClickListener;
private WindowManager windowManager = (WindowManager) getContext()
.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
// 此windowManagerParams變量為獲取的全局變量,用以保存懸浮窗口的屬性
private WindowManager.LayoutParams windowManagerParams = ((FloatApplication) getContext()
.getApplicationContext()).getWindowParams();
public FloatView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
//獲取到狀態(tài)欄的高度
Rect frame = new Rect();
getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
System.out.println("statusBarHeight:"+statusBarHeight);
// 獲取相對屏幕的坐標(biāo),即以屏幕左上角為原點(diǎn)
x = event.getRawX();
y = event.getRawY() - statusBarHeight; // statusBarHeight是系統(tǒng)狀態(tài)欄的高度
Log.i("tag", "currX" + x + "====currY" + y);
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // 捕獲手指觸摸按下動(dòng)作
// 獲取相對View的坐標(biāo),即以此View左上角為原點(diǎn)
mTouchX = event.getX();
mTouchY = event.getY();
mStartX = x;
mStartY = y;
Log.i("tag", "startX" + mTouchX + "====startY"
+ mTouchY);
break;
case MotionEvent.ACTION_MOVE: // 捕獲手指觸摸移動(dòng)動(dòng)作
updateViewPosition();
break;
case MotionEvent.ACTION_UP: // 捕獲手指觸摸離開動(dòng)作
updateViewPosition();
mTouchX = mTouchY = 0;
if ((x - mStartX) < 5 && (y - mStartY) < 5) {
if(mClickListener!=null) {
mClickListener.onClick(this);
}
}
break;
}
return true;
}
@Override
public void setOnClickListener(OnClickListener l) {
this.mClickListener = l;
}
private void updateViewPosition() {
// 更新浮動(dòng)窗口位置參數(shù)
windowManagerParams.x = (int) (x - mTouchX);
windowManagerParams.y = (int) (y - mTouchY);
windowManager.updateViewLayout(this, windowManagerParams); // 刷新顯示
}
}

代碼解釋
int statusBarHeight = frame.top;
為獲取狀態(tài)欄的高度,為什么在event.getRawY()的時(shí)候減去狀態(tài)欄的高度呢?
因?yàn)槲覀兊膽腋〈翱诓豢赡茱@示到狀態(tài)欄中去,而后getRawY為獲取到屏幕原點(diǎn)的距離。當(dāng)我們屏幕處于全屏模式時(shí),獲取到的狀態(tài)欄高度會(huì)變成0
(x - mStartX) < 5 && (y - mStartY) < 5
如果我們在觸摸過程中,移動(dòng)距離少于5 ,則視為點(diǎn)擊,觸發(fā)點(diǎn)擊的回調(diào)。
另外我們需要自定義一個(gè)application:
復(fù)制代碼 代碼如下:

public class FloatApplication extends Application {
private WindowManager.LayoutParams windowParams = new WindowManager.LayoutParams();
public WindowManager.LayoutParams getWindowParams() {
return windowParams;
}
}

代碼解釋
自定義application的目的是為了保存windowParams的值 ,因?yàn)槲覀冊谕蟿?dòng)懸浮窗口的時(shí)候,如果每次都重新new一個(gè)layoutParams的話,在update
的時(shí)候會(huì)在異常發(fā)現(xiàn)。
windowParams的值也不一定非得在自定義application里面來保存,只要是全局的都行。
最后我們再來看看Activity中的實(shí)現(xiàn)。
復(fù)制代碼 代碼如下:

public class MainActivity extends Activity implements OnClickListener{
private WindowManager windowManager = null;
private WindowManager.LayoutParams windowManagerParams = null;
private FloatView floatView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//取消標(biāo)題欄
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
WindowManager.LayoutParams. FLAG_FULLSCREEN);//全屏
setContentView(R.layout.activity_main);
createView();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onDestroy() {
super.onDestroy();
// 在程序退出(Activity銷毀)時(shí)銷毀懸浮窗口
windowManager.removeView(floatView);
}
private void createView() {
floatView = new FloatView(getApplicationContext());
floatView.setOnClickListener(this);
floatView.setImageResource(R.drawable.ic_launcher); // 這里簡單的用自帶的icon來做演示
// 獲取WindowManager
windowManager = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
// 設(shè)置LayoutParams(全局變量)相關(guān)參數(shù)
windowManagerParams = ((FloatApplication) getApplication()).getWindowParams();
windowManagerParams.type = LayoutParams.TYPE_PHONE; // 設(shè)置window type
windowManagerParams.format = PixelFormat.RGBA_8888; // 設(shè)置圖片格式,效果為背景透明
// 設(shè)置Window flag
windowManagerParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE;
/*
* 注意,flag的值可以為:
* LayoutParams.FLAG_NOT_TOUCH_MODAL 不影響后面的事件
* LayoutParams.FLAG_NOT_FOCUSABLE 不可聚焦
* LayoutParams.FLAG_NOT_TOUCHABLE 不可觸摸
*/
// 調(diào)整懸浮窗口至左上角,便于調(diào)整坐標(biāo)
windowManagerParams.gravity = Gravity.LEFT | Gravity.TOP;
// 以屏幕左上角為原點(diǎn),設(shè)置x、y初始值
windowManagerParams.x = 0;
windowManagerParams.y = 0;
// 設(shè)置懸浮窗口長寬數(shù)據(jù)
windowManagerParams.width = LayoutParams.WRAP_CONTENT;
windowManagerParams.height = LayoutParams.WRAP_CONTENT;
// 顯示myFloatView圖像
windowManager.addView(floatView, windowManagerParams);
}
public void onClick(View v) {
Toast.makeText(this, "Clicked", Toast.LENGTH_SHORT).show();
}
}

代碼解釋
在activity中我們主要是添加懸浮窗,并且設(shè)置他的位置。另外需要注意flags的應(yīng)用:
LayoutParams.FLAG_NOT_TOUCH_MODAL 不影響后面的事件
LayoutParams.FLAG_NOT_FOCUSABLE 不可聚焦
LayoutParams.FLAG_NOT_TOUCHABLE 不可觸摸
最后我們在onDestroy()中移除到懸浮窗口。所以,我們測試的時(shí)候,記得按Home鍵來切換到桌面。
最后千萬記得,在androidManifest.xml中來申明我們需要用到的android.permission.SYSTEM_ALERT_WINDOW權(quán)限
并且記得申明我們自定義的application哦。
AndroidManifest.xml代碼如下
復(fù)制代碼 代碼如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.krislq.floating"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" android:name="FloatApplication">
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产91对白刺激露脸在线观看| 国产精品美女主播| 欧美一级在线观看| 欧美性猛交xxx乱大交3蜜桃| 亚洲国产视频网站| 青春草视频在线观看| 日韩免费av一区二区三区| www.日本高清视频| 欧美一区二区三区综合| 国产精品资源网站| 国产免费成人在线| 在线观看欧美成人| 久久成人免费观看| 亚洲综合自拍网| 岛国大片在线观看| 99re热在线观看| 日本一区二区三区视频在线播放| 久久国产视频网| 黄色大片在线免费看| 国内精品久久久久久久久电影网| 欧美大胆人体bbbb| 欧美日韩在线网站| 午夜av免费在线观看| 欧美日韩高清一区二区不卡| 蝴蝶中文综合娱乐网| 国产桃色电影在线播放| 欧美三日本三级少妇三99| 精品伦精品一区二区三区视频密桃| 日产精品一区| 亚洲国产精品高清| 国产真实的和子乱拍在线观看| 日韩精品视频观看| 俄罗斯嫩小性bbwbbw| 久草精品电影| 成年人网站免费在线观看| 九色91在线| 黄色av日韩| 欧美视频在线视频| 亚洲成人毛片| 午夜一区二区三区免费| 国产欧美1区2区3区| 天天做天天摸天天爽国产一区| 国产视频青青| 久久精品一区二区免费播放| 亚洲熟女乱色一区二区三区| 亚洲国产精品视频在线| 日韩美女视频19| 免费在线播放av| 精品视频在线一区二区在线| 免费看黄视频网站| 亚洲一区二区三区在线| 成人激情视频在线| 欧美精品一区二区久久| 日本中文在线一区| 日韩精品一级二级| 亚洲第一狼人区| 免费中文字幕日韩欧美| 亚洲一区二区三区四区五区黄| 免费看污黄网站在线观看| 国产精品无码一区二区在线| 日本中文字幕电影在线观看| www.成人在线.com| 精品一区在线观看视频| 国产欧美一区二区三区精品酒店| 国产成人视屏| 欧美精品自拍偷拍| 国产人妻精品一区二区三| 在线精品日韩| 992tv人人草| 激情自拍一区| av在线免费观看不卡| 成在在线免费视频| 国产裸体永久免费无遮挡| 精品视频高潮| 91精品xxx在线观看| 欧美亚洲免费在线一区| 欧美极品少妇与黑人| 中文字幕久精品免| 国产·精品毛片| 超薄肉色丝袜足j调教99| 欧美一级一片| 青草青在线视频| 日本韩国欧美一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲日本丝袜连裤袜办公室| www.色欧美| 亚洲成a人片在线不卡一二三区| 希岛爱理中文字幕| 久久久综合色| h网站在线看| 91国产免费看| 999大胆视频| 久久综合国产精品台湾中文娱乐网| 日本aaa在线观看| 天天做天天躁天天躁| 国产欧美一区二区三区视频| 国产99久久久国产精品| 欧美日韩国产一区二区三区不卡| 亚洲男人av| 欧美成人3dxxxx| 亚洲va欧美va人人爽成人影院| 91亚洲精华国产精华精华液| 激情视频在线观看一区二区三区| av小说在线观看| 亚洲一区二区三区精品中文字幕| 国产精品免费不| 99久久精品一区二区| 四虎永久网址| 午夜福利一区二区三区| 麻豆极品一区二区三区| 国产国语性生话播放| 99成人在线观看| 国产精品99久久久久久久久久久久| 日本免费一区二区视频| 国产在线一区二区三区欧美| 在线免费av导航| 丝袜制服影音先锋| 在线日本欧美| 亚洲第一精品夜夜躁人人爽| 亚洲五码中文字幕| 国产精品zjzjzj在线观看| 91视频精品在这里| 日韩欧美一区二区三区| 欧美自拍第一页| 综合久久精品| 欧美精品国产精品日韩精品| 亚洲福利免费| 欧美中文字幕视频在线观看| 色综合久久久无码中文字幕波多| 亚洲日本电影| 国产精品第108页| 在线观看日韩一区| 91黄在线观看| 亚洲欧美国产另类首页| 激情六月婷婷久久| 欧美综合视频在线观看| 成人网欧美在线视频| 国产精品久久久久久久久夜色| 欧美人与禽zoz0善交| 怡红院av久久久久久久| 91精品久久久久久久91蜜桃| 日韩激情电影| 国产精品三p一区二区| 国产aⅴ夜夜欢一区二区三区| 嫩草av久久伊人妇女超级a| 国产免费人人看| 天天舔天天操天天干| 高清国语自产拍免费一区二区三区| 99日在线视频| 男人操女人逼免费视频| 免费av片在线观看一道本| 99久在线精品99re8热| 永久免费av片在线观看全网站| 特大巨黑人吊性xxx视频| 久久久精品福利| 大片免费播放在线视频| 亚洲一区二区三区无吗| 国产一线二线三线在线观看| 日韩网站在线| 成年人免费视频播放| 免费观看特级毛片| 天堂在线中文字幕| 久久久久久久久免费看无码| 伊人青青综合网站| 日本中文字幕在线看| 成人性生交大片免费看中文网站| 国产三级一区二区三区| 国产精品视频精品| 亚洲桃花岛网站| 手机av免费看| 中文字幕制服丝袜| www天堂在线| 精品国产伦一区二区三区免费| 亚洲欧美一区二区原创| 成年人视频免费| 亚洲美女精品久久| 亚洲美女福利视频网站| 麻豆网站在线免费观看| 中文字幕精品一区二区精品绿巨人| 成人黄色网址| 91久久国产最好的精华液| 欧美久久久久久久久久久久| 欧美一区二区网站| 日韩成人免费观看| 国产精品欧美久久久久天天影视| 国产在线视频一区二区三区| 成人高清视频在线观看| 尤物视频网址| 在线看黄网站| 亚洲综合av网| 亚州av影院| 北条麻妃一二三区| 国产女人aaa级久久久级| 日韩欧美一级二级三级久久久| 欧洲免费在线视频| av观看免费在线| 福利精品视频在线| www.偷拍.com| 台湾佬成人网| 日本精品一区二区三区高清 久久| 蜜桃久久精品一区二区| 九色蝌蚪视频在线| 日韩欧美一级片| 免费黄色的网站| 国产手机在线观看| 亚洲淫性视频| 国产 日韩 亚洲 欧美| 中文人妻av久久人妻18| 亚洲jjzzjjzz在线观看| 国产伦理久久久久久妇女| 91精品国产乱码在线观看| 五月综合激情婷婷六月色窝| 亚洲黄色成人久久久| 日韩成人av在线资源| 三级黄色在线观看| 一本到不卡免费一区二区| 日韩有码第一页| 精品久久97| 永久免费不卡在线观看黄网站| 这里只有精品视频在线| 最新中文字幕2018| 日韩午夜av电影| 亚洲国产精品99久久| 比比资源先锋| www.99re7| 欧美白人最猛性xxxxx69交| 91影院未满十八岁禁止入内| 四虎免费播放| 国产午夜精品美女毛片视频| 亚洲一区二区三区四区中文| 色一情一乱一伦一区二区三区| 日韩少妇中文字幕| 日韩成人三级视频| 日韩在线国产| 国产香蕉精品视频| 97国产suv精品一区二区62| 久久一卡二卡| 亚洲午夜精品一区二区| 美女av在线免费观看| 欧美人与性动交a欧美精品| 美女极度色诱视频www免费观看| 亚洲综合精品久久| 精品国产一区二区三区久久久狼牙| 影音欧美亚洲| 91探花在线观看| 国产对白在线正在播放| 欧美日韩国产综合一区二区三区| 影音先锋一区二区资源站| 97在线观看视频| 美女大黄三级视频在线观看| 国产伦精品一区二区三区四区| 国内精品久久久久影院 日本资源| 亚洲精选一区二区三区| 久草热8精品视频在线观看| 国产免费999| 日本久久一区二区三区| 一区二区三区视频免费视频观看网站| 亚洲国产精品久久久久秋霞不卡| 福利在线免费视频| 免费xxxxx网站中文字幕| 日韩不卡在线观看日韩不卡视频| 韩剧1988在线观看免费完整版| 国产风韵犹存在线视精品| av成人 com a| 亚洲成人动漫精品| 国产xxxxxx久色视频在| 在线视频尤物| 中文字幕一区图| 性欧美丰满熟妇xxxx性久久久| 国产精品久久久久av蜜臀| 老鸭窝一区二区久久精品| 国产美女91呻吟求| 国产精品欧美韩国日本久久| 青青草视频网站| 国产在线视频资源| 成人在线观看毛片| 国产精品红桃| 中文字幕123| 欧美一区二区三区网站| 欧美精品欧美精品| 欧美综合视频在线| 久久国产精品视频在线观看| www.欧美精品一二区| 国产精品高潮视频| 中文字幕视频精品一区二区三区| 搞黄视频免费在线观看| 亚洲av无一区二区三区| 人人爽久久涩噜噜噜网站| 亚洲国产另类 国产精品国产免费| 蜜桃久久影院| 亚洲调教视频在线观看| 麻豆影视国产在线观看| 色综合一区二区日本韩国亚洲| 欧美最猛性xxxxx直播| 国产精品日韩在线| 一区二区三区视频免费观看| 久久精品最新免费国产成人| 无码人妻精品一区二区三区蜜桃91| 成人黄色大片在线免费观看| 亚洲老女人视频免费| 激情美女网站| 青青草精品视频在线| 91精品久久久久久| 国产乱淫av片免费| 国产美女娇喘av呻吟久久| tube国产麻豆| 欧美福利视频一区| 国产视频在线观看一区二区三区| 欧洲亚洲女同hd| 婷婷综合影院| 欧美成人伊人久久综合网| 亚洲视频二区| 免费网站观看www在线观| aaa亚洲精品一二三区| 久久免费视频观看| 一色道久久88加勒比一| 中日韩av在线播放| 国产福利一区二区三区视频| 全部孕妇毛片丰满孕妇孕| 久久久久999| 国产精品久久网站| 中文字幕第4页| 成人性做爰aaa片免费看不忠| 紧缚捆绑精品一区二区| 国产精品美女视频免费观看软件| 亚洲国产一区在线观看| 午夜视频一区| 亚洲一区二区观看|