日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

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

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

2020-04-11 12:40:36
字體:
供稿:網(wǎng)友
用過新版本android 360手機(jī)助手都人都對(duì) 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);
// 獲取相對(duì)屏幕的坐標(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)作
// 獲取相對(duì)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
如果我們?cè)谟|摸過程中,移動(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)槲覀冊(cè)谕蟿?dòng)懸浮窗口的時(shí)候,如果每次都重新new一個(gè)layoutParams的話,在update
的時(shí)候會(huì)在異常發(fā)現(xiàn)。
windowParams的值也不一定非得在自定義application里面來保存,只要是全局的都行。
最后我們?cè)賮砜纯碅ctivity中的實(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 不可觸摸
最后我們?cè)趏nDestroy()中移除到懸浮窗口。所以,我們測(cè)試的時(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ā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
九九在线精品| 粉嫩喷白浆久久| 国产免费播放一区二区| 久久精品国产视频| 国产在线播放一区二区| 欧美日韩国产在线观看| 精品一二三四区| 日韩在线不卡一区| 精品熟女一区二区三区| 久久久久久91| 国产一卡2卡3卡四卡网站| 日韩欧美亚洲视频| 精品av中文字幕在线毛片| 在线亚洲免费| 亚洲成av人片一区二区密柚| 中文字幕久久av| a视频免费看| 精品久久九九| 尤物av一区二区| 国产在线视频不卡| 91亚洲欧美| 欧美日韩三级视频| 日韩三级一区二区| 日韩三级视频中文字幕| 不卡视频一区二区| 在线视频国产三级| 欧美日韩性视频在线| 国产免费久久久| 国产香蕉精品视频| 在线欧美一级视频| 精品日韩在线观看| 久久99精品久久久久子伦| 日本不卡视频一区| 日本免费在线视频不卡一不卡二| 在线视频你懂得一区| 中文欧美字幕免费| 国产乱码在线| 中文字幕久久精品| 日韩精品首页| 国产黄色在线免费观看| 91久久精品国产91久久| 亚洲三级国产| 国产一级片网站| 在线综合 亚洲 欧美中文字幕| 日韩不卡高清视频| 欧美日韩国产首页| 国产永久在线观看| 亚洲第一香蕉网| 亚洲v中文字幕| 91欧美日韩在线| 国产三级第一页| 精品视频在线视频| 亚洲一区日韩在线| 国产在线导航| 亚洲免费看av| 亚洲高清在线观看一区| 国产成人精品网址| 精品视频在线导航| 日韩精品国产欧美| 日韩在线中文| 日韩高清在线不卡| 亚洲成在线观看| 日韩av一区在线| 国产午夜精品视频免费不卡69堂 | 国产主播中文字幕| 亚洲视频在线观看日本a| 久久精品在线观看| 日韩视频在线免费看| 久久精品黄色片| 国产99在线|亚洲| 国产99亚洲| 精品三级av| 欧美日韩国产不卡| 国产无套粉嫩白浆在线2022年 | 日韩欧美中文字幕一区| 欧美日韩一二三| 亚洲一区在线观看网站| 黄色一级大片在线免费看国产一| 国产区在线看| 日韩精品国产欧美| 亚洲a级在线播放观看| 亚洲羞羞网站| 91精品在线免费| av中文网站| 亚洲乱码中文字幕综合| 国产一级视频| 精品国产网站在线观看| 午夜国产在线| 91精品久久久久| 亚洲日产av中文字幕| 在线不卡一区二区| 精品在线网站观看| 欧美亚洲另类制服自拍| 欧美一级久久| 国产福利三区| 免费看黄资源大全高清| 欧美午夜影院在线视频| 91久久久精品国产| 一区二区视频在线观看免费的| 日韩欧美一级二级三级久久久| 国产三级精品网站| 91精品国产经典在线观看| 天堂在线一区二区三区| 久久综合九色欧美综合狠狠| 中文在线а√在线8| 中文字幕 日韩 欧美| 91精品国产全国免费观看 | 国产亚洲一级| av中文资源在线| 国产欧美日韩中文字幕| 亚洲 欧美 中文字幕| 91精品国产99| 在线国产99| 91精品视频播放| 国产欧美日韩最新| 国产区高清在线| 亚洲一区精品在线| 日韩精品在线免费看| 日韩中文欧美在线| 欧美日韩91| 国产免费电影网站入口| 国产欧美日韩最新| 中文字幕在线观看网址| 亚洲免费看av| 在线国产日本| 亚洲成人7777| 日韩久久精品视频| 国产永久在线观看| 中文字幕精品在线视频| 亚洲欧美韩国综合色| 国产999在线观看| www..com日韩| 久草亚洲一区| 国产h片在线观看| 中文字幕日韩免费视频| 欧美一卡2卡三卡4卡5免费| 欧美日韩亚洲一| 欧美一级手机免费观看片 | 国产视频一区三区| 午夜伦欧美伦电影理论片| 日韩中文字幕在线视频播放| 亚洲国产综合久久| 色综合天天性综合| 国产在线拍揄自揄拍| 99久久婷婷| 天天综合日日夜夜精品| 欧美色视频一区二区三区在线观看| 成人欧美亚洲| 午夜伊人狠狠久久| 在线视频亚洲| 久久婷婷综合国产| 国产午夜精品视频免费不卡69堂| 国产一级在线| 免费国产成人看片在线| 欧美一级久久| 成人一区而且| 中文字幕线观看| 欧美一级日韩一级| 色综合天天综合网国产成人综合天| 视频一区不卡| 日韩欧中文字幕| 欧美高清一区| 亚洲精华国产欧美| 中文在线视频| 欧美日韩国产免费观看| 午夜国产在线视频| 国产欧美日韩高清| 久久99精品久久久久子伦| 亚洲大片精品永久免费| 日韩欧美中文字幕一区| 日韩免费视频| 精品一二三四| 在线中文免费视频| 在线看的av| 日韩av中文字幕一区| 一级片在线播放| av中文网站| 亚洲黄页一区| 国产欧美亚洲一区| 精品在线一区二区三区| 欧美日韩中文字幕| 精品成人久久久| 国产一级视频| 69堂精品视频在线播放| 国产一二三精品| 亚洲精品中文字幕乱码三区不卡| 久久视频在线免费观看| 国产在线一在线二| 中文字幕亚洲欧美| 国产福利在线导航| 中文字幕第一页在线| 亚洲欧洲日产国码av系列天堂 | 日本熟女一区二区| 在线一区二区三区精品| 亚洲男人在线| 欧洲精品在线视频| 在线日韩中文| 色99中文字幕| 中文欧美日韩| 国产色在线视频| 精品国产99| 一区二区三区在线免费| 午夜国产在线视频| 久久久99精品久久| av免费在线观看网址| aaa欧美日韩| 在线中文免费视频| 欧美日韩亚洲一| 日韩精品视频在线| 亚洲国产欧美91| 欧美三级中文字幕| 精品三级av| 中文字幕精品亚洲| 欧美一级免费观看| 欧美日韩亚洲综合在线| 中文字幕精品一区二| 狠狠色噜噜狠狠狠狠97| 精品国产99久久久久久| 亚洲福利精品视频| 欧美日韩精品免费看| 亚洲成av人片| 最近中文字幕日韩精品| 视频一区中文字幕国产| 免费视频中文字幕| 国产小视频免费在线观看| 精品视频在线视频| 欧美日韩国产首页| 欧美日韩国产一区在线| 中文字幕综合在线| 欧美日韩在线视频首页| 色综合婷婷久久| 在线视频你懂得一区| 一区二区精品| 精品视频999| 91麻豆视频网站| 欧美激情一区二区在线| 亚洲va中文字幕| 一区二区视频在线| 91久久精品国产91久久| 欧美日韩中文字幕精品| 日韩中文字幕在线播放| 99精品在线播放| 欧美日韩性视频一区二区三区| 欧美wwww| 精品视频在线导航| 91精品国产手机| 日韩视频在线观看视频| 91精品国产91久久| 免费高清特黄a大片| 一级片免费在线| 亚洲成年网站在线观看| 欧美日韩综合视频网址| 欧美在线日韩在线| 国产裸舞福利在线视频合集| 日韩中文欧美| 一区二区不卡在线| 免费精品国产自产拍在| 日韩视频国产视频| 国产欧美中文字幕| 中文字幕日韩视频| 欧美 日韩 国产 在线观看| 国产小视频在线| 激情综合色综合久久| 亚洲视频一二三四| 国产一区在线精品| 在线国产1区| 日韩视频精品| 中文字幕日韩精品在线| 粉嫩喷白浆久久| 91精品久久久久久久久久| 久久精品蜜桃| 欧美一级一级性生活免费录像| 中文字幕伊人| 欧美1234区| 欧美在线亚洲一区| 亚洲日本欧美日韩高观看| 国产福利在线播放| 日韩一二三四区| 中文字幕亚洲一区在线观看| 日本精品在线中文字幕| 久久精品在线免费观看| 91色在线看| 国产永久在线观看| 亚洲高清在线免费| 欧美一级二级三级区| 日韩不卡av| 欧美高清一级片在线| 国产欧美日韩在线| 色综合天天综合网国产成人综合天| 中文天堂资源在线| 久久久91精品国产| 欧美,日韩,国产在线| 亚洲专区一二三| 国产日韩av一区| 日韩精品在线播放| 中文字幕中文字幕精品| 日韩中文欧美在线| 日韩精品一区二区三区视频播放| 国产日韩精品在线看| 久久视频www| 国产对白在线| 欧美三级网址| 国产劲爆久久| 色综合久久88色综合天天免费| 久久蜜桃一区二区| 日韩不卡一二区| 中文字幕在线导航| 日本亚洲视频在线| 日本xxxwww免费视频| 日韩免费不卡avV| 日韩欧美亚洲国产| 在线中文字幕视频观看| 一区二区91| 日韩欧美中文第一页| 在线不卡一区二区| aaa大片在线观看| 日韩欧美一卡二卡| 在线视频不卡国产V| 中文字幕 亚洲一区| 视频一区视频二区中文| 欧美国产一区视频在线观看| 午夜一区二区三区| 精品中文字幕在线播放| 日韩区欧美区| 二区视频在线观看| 在线手机中文字幕| 欧美日韩中文字幕精品| 国产中文伊人| 欧美日韩高清不卡| 国产小视频在线| 91久久大香伊蕉在人线| 国产乱码午夜在线视频| 91精品国产丝袜白色高跟鞋| 日韩视频在线一区二区三区| 日韩欧美99| 日韩av一区在线| 国产欧美综合视频| 日韩在线视频观看正片免费网站| 中文字幕在线视频精品| 久久综合久久综合九色| 国产91久久久久蜜臀青青天草二 | 国产在线观看黄色| 中文字幕亚洲国产| 日韩午夜黄色| av免费网站在线观看| 二区视频在线观看| 日韩在线精品视频| 中文天堂在线一区| 国产成人精品网址| 精品国产乱码久久久久久蜜臀 | 999精品在线| 国产精品一区二三区| 国产欧美 在线欧美| 日韩精品视频在线观看视频| 亚洲成在线观看| 亚洲免费观看视频| 成人禁用看黄a在线| 国产福利一区在线观看| 久久综合久久综合九色| 午夜av一区二区| 日韩中文在线中文网三级| 国产成人精品综合久久久| 午夜影院在线观看欧美| 午夜伦欧美伦电影理论片| 国产一区不卡精品| 91精品视频在线| 日韩欧美一级视频| 黄色国产在线| 不卡在线一区二区| 中文字幕在线精品| 在线国产99| 国产最新在线| 免费日韩精品中文字幕视频在线| 亚洲福利视频在线| 日韩精品―中文字幕| 日韩av在线中文字幕| 国产一区二中文字幕在线看| 91精品婷婷国产综合久久| 中文字幕久精品免费视频| 欧美日韩精品三区| 日韩欧美国产片| 免费一级欧美在线观看视频| 精品久久久视频| 亚洲最新永久观看在线| 日韩www在线| 一区二区不卡久久精品| 国产丝袜欧美中文另类| 欧美日韩国产黄色| 久久香蕉精品| 亚洲 欧美 中文字幕| 中文字幕欧美日韩精品| 一本大道一区二区三区| 欧美日韩中文字幕| 国产免费电影网站入口| 一二三区精品福利视频| 国产视频2区| 精品人妻一区二区免费视频| 精品午夜av| 国产一卡2卡3卡4卡网站免费| 亚洲高清在线观看一区|