日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Android實現(xiàn)全局懸浮框

瀏覽:121日期:2022-09-21 08:37:06

本文實例為大家分享了Android實現(xiàn)全局懸浮框的具體代碼,供大家參考,具體內(nèi)容如下

效果圖:

Android實現(xiàn)全局懸浮框

代碼實現(xiàn):

Androidmanifest.xml添加彈框權(quán)限

<uses-permission android:name='android.permission.SYSTEM_ALERT_WINDOW' />

自定義懸浮窗類FloatWindow.java

public class FloatWindow implements View.OnTouchListener { private Context mContext; private WindowManager.LayoutParams mWindowParams; private WindowManager mWindowManager; private View mFloatLayout; private float mInViewX; private float mInViewY; private float mDownInScreenX; private float mDownInScreenY; private float mInScreenX; private float mInScreenY; private TextView infoText; public FloatWindow(Context context) { this.mContext = context; initFloatWindow(); } private void initFloatWindow() { LayoutInflater inflater = LayoutInflater.from(mContext); if(inflater == null) return; mFloatLayout = (View) inflater.inflate(R.layout.layout_float, null); infoText = mFloatLayout.findViewById(R.id.textView); mFloatLayout.setOnTouchListener(this); mWindowParams = new WindowManager.LayoutParams(); mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); if (Build.VERSION.SDK_INT >= 26) {//8.0新特性 mWindowParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; }else{ mWindowParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT; } mWindowParams.format = PixelFormat.RGBA_8888; mWindowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; mWindowParams.gravity = Gravity.START | Gravity.TOP; mWindowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; mWindowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; } @Override public boolean onTouch(View view, MotionEvent motionEvent) { return floatLayoutTouch(motionEvent); } private boolean floatLayoutTouch(MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: // 獲取相對View的坐標(biāo),即以此View左上角為原點 mInViewX = motionEvent.getX(); mInViewY = motionEvent.getY(); // 獲取相對屏幕的坐標(biāo),即以屏幕左上角為原點 mDownInScreenX = motionEvent.getRawX(); mDownInScreenY = motionEvent.getRawY() - getSysBarHeight(mContext); mInScreenX = motionEvent.getRawX(); mInScreenY = motionEvent.getRawY() - getSysBarHeight(mContext); break; case MotionEvent.ACTION_MOVE: // 更新浮動窗口位置參數(shù) mInScreenX = motionEvent.getRawX(); mInScreenY = motionEvent.getRawY() - getSysBarHeight(mContext); mWindowParams.x = (int) (mInScreenX- mInViewX); mWindowParams.y = (int) (mInScreenY - mInViewY); // 手指移動的時候更新小懸浮窗的位置 mWindowManager.updateViewLayout(mFloatLayout, mWindowParams); break; case MotionEvent.ACTION_UP: // 如果手指離開屏幕時,xDownInScreen和xInScreen相等,且yDownInScreen和yInScreen相等,則視為觸發(fā)了單擊事件。 if (mDownInScreenX == mInScreenX && mDownInScreenY == mInScreenY){ } break; } return true; } public void showFloatWindow(){ if (mFloatLayout.getParent() == null){ DisplayMetrics metrics = new DisplayMetrics(); // 默認(rèn)固定位置,靠屏幕右邊緣的中間 mWindowManager.getDefaultDisplay().getMetrics(metrics); mWindowParams.x = metrics.widthPixels; mWindowParams.y = metrics.heightPixels/2 - getSysBarHeight(mContext); mWindowManager.addView(mFloatLayout, mWindowParams); } } public void updateText(final String s) { infoText.setText(s); } public void hideFloatWindow(){ if (mFloatLayout.getParent() != null) mWindowManager.removeView(mFloatLayout); } public void setFloatLayoutAlpha(boolean alpha){ if (alpha) mFloatLayout.setAlpha((float) 0.5); else mFloatLayout.setAlpha(1); } // 獲取系統(tǒng)狀態(tài)欄高度 public static int getSysBarHeight(Context contex) { Class<?> c; Object obj; Field field; int x; int sbar = 0; try { c = Class.forName('com.android.internal.R$dimen'); obj = c.newInstance(); field = c.getField('status_bar_height'); x = Integer.parseInt(field.get(obj).toString()); sbar = contex.getResources().getDimensionPixelSize(x); } catch (Exception e1) { e1.printStackTrace(); } return sbar; }}

自定義懸浮窗界面布局文件layout_float.xml

<?xml version='1.0' encoding='utf-8'?><android.support.constraint.ConstraintLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent' xmlns:app='http://schemas.android.com/apk/res-auto'> <ImageView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:src='http://m.b3g6.com/bcjs/@mipmap/float_win' app:layout_constraintStart_toStartOf='parent' app:layout_constraintTop_toTopOf='parent'/> <TextView android: android:layout_width='wrap_content' android:layout_height='wrap_content' android:background='#00ffffff' android:text='hello' android:textSize='12sp' app:layout_constraintLeft_toLeftOf='@id/imageView' app:layout_constraintRight_toRightOf='@id/imageView' app:layout_constraintTop_toBottomOf='@id/imageView'/></android.support.constraint.ConstraintLayout>

在Activity中使用懸浮窗。

public class MainActivity extends AppCompatActivity { private Button btnShow; FloatWindow floatWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 權(quán)限判斷 if (Build.VERSION.SDK_INT >= 23) { if(!Settings.canDrawOverlays(getApplicationContext())) { // 啟動Activity讓用戶授權(quán) Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,Uri.parse('package:' + getPackageName())); startActivityForResult(intent,10); } else { // 執(zhí)行6.0以上繪制代碼 initView(); } } else { // 執(zhí)行6.0以下繪制代碼 initView(); } } @Override protected void onResume() { super.onResume(); // 權(quán)限判斷 if (Build.VERSION.SDK_INT >= 23) { if(Settings.canDrawOverlays(getApplicationContext())) { initView(); } } else { //執(zhí)行6.0以下繪制代碼 initView(); } } private void initView() { setContentView(R.layout.activity_main); floatWindow = new FloatWindow(getApplicationContext()); btnShow = findViewById(R.id.btn_show); btnShow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (null != floatWindow) { floatWindow.showFloatWindow(); } } }); Button btnrefresh = findViewById(R.id.btn_refresh); btnrefresh.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int random = (int) (Math.random() * 10); if (null != floatWindow) { floatWindow.updateText(String.valueOf(random)); } } }); } @Override protected void onDestroy() { super.onDestroy(); if (null != floatWindow) { floatWindow.hideFloatWindow(); } }}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
四虎成人精品一区二区免费网站| 久久人人88| 中文字幕亚洲影视| 亚洲香蕉视频| 日韩国产精品久久久久久亚洲| 日韩精品一区二区三区中文字幕| 日韩成人午夜精品| 在线日韩成人| 久久国产生活片100| 麻豆极品一区二区三区| 国产一区二区三区视频在线| 日韩欧美一区二区三区免费看| 久久影院午夜精品| 久久久久久免费视频| 亚洲国产日韩欧美在线| 日韩精品一二三| 婷婷精品在线| 精品国内亚洲2022精品成人| 日韩影院二区| 国产99精品一区| 国产精品日韩久久久| 亚洲综合婷婷| 国产乱子精品一区二区在线观看| 精品一区二区三区在线观看视频| 中文字幕在线看片| 国产高清一区二区| 亚洲69av| 国产成人精品免费视| 欧洲激情综合| 国产日产精品_国产精品毛片 | 99久久婷婷| 九一国产精品| 欧美在线黄色| 日本精品影院| 亚洲欧美久久精品| 国产一区二区三区国产精品| 欧美特黄一区| 国产伦精品一区二区三区视频| 中文字幕在线看片| 蜜桃久久精品一区二区| 久久精品国产999大香线蕉| 欧美亚洲精品在线| 久久国产三级| 久久麻豆精品| 国产欧美一区| 欧美福利专区| 国产欧美一区二区精品久久久| 福利一区和二区| 亚洲欧美日韩视频二区| 欧美激情麻豆| 亚洲一区不卡| 久久久久97| 亚洲作爱视频| 精品国产精品国产偷麻豆| 日韩午夜高潮| 精品中文在线| 一区二区三区四区精品视频| 丝袜诱惑一区二区| 欧美中文高清| 国产视频欧美| 日韩电影免费网站| 亚洲区国产区| 欧美日韩色图| 欧美精品91| 亚洲精品美女91| 欧美亚洲精品在线| 久久69成人| 亚洲精品黄色| 亚洲欧美日韩高清在线| 国产精品jk白丝蜜臀av小说| 日韩一区二区免费看| 丰满少妇一区| 日韩精品免费视频人成| 99国产精品一区二区| 国产精品色在线网站| 午夜在线视频观看日韩17c| 色婷婷亚洲mv天堂mv在影片| 日本va欧美va瓶| 在线亚洲欧美| 日本精品影院| 日韩1区2区| 久久国产麻豆精品| 免费在线观看精品| 国产二区精品| 日韩天堂在线| 精品免费视频| 国产精品一级| 四虎精品永久免费| 丝袜美腿亚洲一区| 91九色精品| 日韩免费高清| 精品一区视频| 国产精品久久久久久模特 | 亚洲一区二区成人| 99精品电影| 日韩av免费| 日韩综合一区| 国产一区丝袜| 欧美激情五月| 国产精品久久久久av蜜臀| 日韩中文字幕无砖| 噜噜噜躁狠狠躁狠狠精品视频 | 久久久久久夜| 久久精品理论片| 麻豆传媒一区二区三区| 国产另类在线| 国产伦精品一区二区三区在线播放 | 免费av一区二区三区四区| 首页国产精品| 国产一区二区三区不卡av| 欧美国产另类| 麻豆91小视频| 国产精品丝袜在线播放| 国产乱子精品一区二区在线观看| 日本在线不卡视频| 日韩精品国产精品| 日韩高清不卡在线| 日本一区福利在线| 日韩高清电影一区| 久久国产人妖系列| 久久av免费| 国内自拍视频一区二区三区| 久久亚洲精精品中文字幕| 精品三级久久久| 吉吉日韩欧美| 欧美一级鲁丝片| 伊人久久大香线蕉av不卡| 91精品国产成人观看| 女同性一区二区三区人了人一| 午夜影院欧美| 香蕉久久久久久久av网站| 蜜臀久久久99精品久久久久久| 中文字幕日韩欧美精品高清在线| 亚洲欧美网站在线观看| 欧美日韩中文| 开心激情综合| 中国字幕a在线看韩国电影| 日韩国产网站| 亚洲综合电影一区二区三区| 最新国产精品视频| 国产精品一级| 日韩欧美精品一区| 欧美91精品| 日韩一区二区三免费高清在线观看| 欧美色综合网| 中文av在线全新| 欧美精品黄色| 日本va欧美va瓶| 精品国产亚洲一区二区三区在线 | 国产精品麻豆久久| 亚洲夜间福利| 免费一区二区视频| 欧美日韩一区二区国产| 精品欧美日韩精品| 国产主播一区| 日韩不卡手机在线v区| 另类欧美日韩国产在线| 久久狠狠婷婷| 日韩精品久久久久久久软件91| 久久久久伊人| 九一精品国产| 97成人在线| 特黄毛片在线观看| 免费人成黄页网站在线一区二区| 国产精品一区亚洲| 99久久精品网| 午夜久久av| av资源新版天堂在线| 1024精品久久久久久久久| 天堂va在线高清一区| 国产精品成人a在线观看| 亚洲欧美日本日韩| 精品国产鲁一鲁****| 老鸭窝毛片一区二区三区| 国产精品3区| 米奇777超碰欧美日韩亚洲| 日本在线一区二区三区| 9999国产精品| 亚洲日韩视频| 色在线中文字幕| 日韩欧美久久| 四虎4545www国产精品 | 国产免费av国片精品草莓男男 | 日韩高清中文字幕一区二区| 亚洲青青久久| 久久免费大视频| 国产日本久久| 女人天堂亚洲aⅴ在线观看| 欧美激情综合| 欧美专区18| 综合日韩av| 三级在线观看一区二区| 精品国产乱码久久久久久1区2匹| 免费日韩av片| 樱桃视频成人在线观看| 日本少妇精品亚洲第一区| 免费国产自久久久久三四区久久| 久久丁香四色| 亚洲精品女人| 激情五月综合网|