最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

android實現(xiàn)桌面移動懸浮窗口

 更新時間:2018年07月30日 09:03:00   作者:我守一座空城丶  
這篇文章主要為大家詳細介紹了android實現(xiàn)桌面移動懸浮窗口,具有一定的參考價值,感興趣的小伙伴們可以參考一下

現(xiàn)在很多應用都有這樣的功能,比如360等安全衛(wèi)士,手機管家之內的應用。

效果圖:

一、實現(xiàn)原理及移動思路

調用WindowManager,并設置WindowManager.LayoutParams的相關屬性,通過WindowManager的addView方法創(chuàng)建View,這樣產(chǎn)生出來的View根據(jù)WindowManager.LayoutParams屬性不同,效果也就不同了。比如創(chuàng)建系統(tǒng)頂級窗口,實現(xiàn)懸浮窗口效果!然后通過覆寫懸浮View中onTouchEvent方法來改變windowMananager.LayoutParams中x和y的值來實現(xiàn)自由移動懸浮窗口。

二、示例代碼

先看看懸浮View的代碼把

package com.example.suspend;
 
import android.content.Context;
import android.util.Log;
import android.view.MotionEvent;
import android.view.WindowManager;
import android.widget.ImageView;
 
public class MyFloatView extends ImageView {
 private float mTouchStartX;
 private float mTouchStartY;
 private float x;
 private float y;
 
 private WindowManager wm = (WindowManager) getContext()
  .getApplicationContext().getSystemService("window");
 // 此wmParams變量為獲取的全局變量,用以保存懸浮窗口的屬性
 private WindowManager.LayoutParams wmParams = ((MyApplication) getContext()
  .getApplicationContext()).getMywmParams();
 
 public MyFloatView(Context context) {
 super(context);
 }
 
 @Override
 public boolean onTouchEvent(MotionEvent event) {
 // TODO Auto-generated method stub
 // 獲取相對屏幕的坐標,即以屏幕左上角為原點
 x = event.getRawX();
 y = event.getRawY() - 25; // 25是系統(tǒng)狀態(tài)欄的高度
 Log.i("currP", "currX" + x + "====currY" + y);
 
 switch (event.getAction()) {
 case MotionEvent.ACTION_DOWN: // 捕獲手指觸摸按下動作
  // 獲取相對View的坐標,即以此View左上角為原點
  mTouchStartX = event.getX();
  mTouchStartY = event.getY();
  Log.i("startP", "startX" + mTouchStartX + "====startY"
   + mTouchStartY);
  break;
 case MotionEvent.ACTION_MOVE://捕獲手指觸摸移動動作      
  updateViewPosition(); 
  break;
 case MotionEvent.ACTION_UP://捕獲手指觸摸離開動作 
  updateViewPosition(); 
  mTouchStartX=mTouchStartY=0; 
  break;
 default:
  break;
 }
 return true;
 }
 
 private void updateViewPosition() {
 //更新浮動窗口位置參數(shù) 
 wmParams.x = (int)(x - mTouchStartX);
 wmParams.y = (int)(y - mTouchStartY);
 wm.updateViewLayout(this, wmParams);//刷新顯示  
 }
}

上面的wmParams變量(即WindowManager.LayoutParams)的存儲采用了extends Application的方式來創(chuàng)建全局變量,
示例代碼如下:

package com.example.suspend;
 
import android.app.Application;
import android.view.WindowManager;
 
public class MyApplication extends Application {
 private WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
 
 @Override
 public void onCreate() {
 // TODO Auto-generated method stub
 super.onCreate();
 }
 
 public WindowManager.LayoutParams getMywmParams() {
 return wmParams;
 
 }
 
}

再來看一看Activity中的代碼:

package com.example.suspend;
 
import android.app.Activity;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.view.Gravity;
import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
 
public class MainActivity extends Activity {
 private WindowManager wm;
 private WindowManager.LayoutParams wmParams;
 private MyFloatView myFV;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 // 創(chuàng)建懸浮窗口
 createFloatView();
 }
 
 private void createFloatView() {
 myFV = new MyFloatView(getApplicationContext());
 myFV.setImageResource(R.drawable.ic_launcher);
 // 獲取WindowManager
 wm = (WindowManager) getApplicationContext().getSystemService("window");
 // 設置LayoutParams(全局變量)相關參數(shù)
 wmParams = ((MyApplication) getApplication()).getMywmParams();
 
 wmParams.type = LayoutParams.TYPE_PHONE;// 設置window type
 wmParams.format = PixelFormat.RGBA_8888;// 設置圖片格式,效果為背景透明
 // 設置Window flag
 wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
  | LayoutParams.FLAG_NOT_FOCUSABLE;
 /*
  * 
  * 下面的flags屬性的效果形同“鎖定”。
  * 
  * 懸浮窗不可觸摸,不接受任何事件,同時不影響后面的事件響應。
  * 
  * wmParams.flags=LayoutParams.FLAG_NOT_TOUCH_MODAL
  * 
  * | LayoutParams.FLAG_NOT_FOCUSABLE
  * 
  * | LayoutParams.FLAG_NOT_TOUCHABLE;
  */
 wmParams.gravity = Gravity.LEFT | Gravity.TOP;// 調整懸浮窗口至左上角,便于調整坐標
 // 以屏幕左上角為原點,設置x、y初始值
 wmParams.x = 0;
 wmParams.y = 0;
 // 設置懸浮窗口長寬數(shù)據(jù)
 wmParams.width = 40;
 wmParams.height = 40;
 // 顯示myFloatView圖像
 wm.addView(myFV, wmParams);
 }
 
 @Override
 protected void onDestroy() {
 // TODO Auto-generated method stub
 super.onDestroy();
 // 在程序退出(Activity銷毀)時銷毀懸浮窗口
 wm.removeView(myFV);
 }
}

最后,別忘了在AndroidManifest.xml中添加權限:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android菜單的定義及ActionBar的實現(xiàn)

    Android菜單的定義及ActionBar的實現(xiàn)

    本篇文章主要介紹了Android菜單的定義及ActionBar的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Android 8.0實現(xiàn)發(fā)送通知

    Android 8.0實現(xiàn)發(fā)送通知

    這篇文章主要為大家詳細介紹了Android 8.0實現(xiàn)發(fā)送通知,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Android圖片裁剪功能實現(xiàn)代碼

    Android圖片裁剪功能實現(xiàn)代碼

    這篇文章主要為大家詳細介紹了Android圖片裁剪功能實現(xiàn)代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android實現(xiàn)二級列表購物車功能

    Android實現(xiàn)二級列表購物車功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)二級列表購物車功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android中Handler與Message的簡單實例

    Android中Handler與Message的簡單實例

    這篇文章主要介紹了Android中Handler與Message的簡單實例的相關資料,這里提供實例來說明線程Handler與message 的結合使用,需要的朋友可以參考下
    2017-08-08
  • 淺談Android中關于靜態(tài)變量(static)的使用問題

    淺談Android中關于靜態(tài)變量(static)的使用問題

    本文主要介紹了Android中關于靜態(tài)變量(static)的使用問題,具有一定的參考作用,下面跟著小編一起來看下吧
    2017-01-01
  • Android使用Intent實現(xiàn)頁面跳轉

    Android使用Intent實現(xiàn)頁面跳轉

    這篇文章主要為大家詳細介紹了Android使用Intent實現(xiàn)頁面跳轉,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android開發(fā)者需要知道的8個項目管理技巧

    Android開發(fā)者需要知道的8個項目管理技巧

    這篇文章主要為大家詳細介紹了Android開發(fā)者需要知道的8個項目管理技巧,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 詳解Gradle構建過程

    詳解Gradle構建過程

    Gradle是項目構建工具,是Google官方推薦的Android項目編譯工具。構建工具是可以讓開發(fā)者以可執(zhí)行和有序的任務來表達自動化的需求。就是將源代碼生成可執(zhí)行程序。本文將詳細介紹Gradle構建過程
    2021-06-06
  • Android studio 快捷鍵大全

    Android studio 快捷鍵大全

    android studio使用教程,主要為大家介紹的是android studio快捷鍵,如果我們掌握了一些常用快捷鍵,那么在使用android studio的過程中會達到事半功倍的效果哦
    2016-01-01

最新評論

衡阳县| 嘉善县| 临桂县| 迁安市| 固镇县| 兴海县| 砀山县| 陆丰市| 台北市| 农安县| 寿宁县| 江山市| 汤阴县| 纳雍县| 陆河县| 申扎县| 四子王旗| 霍山县| 静宁县| 乌鲁木齐县| 高碑店市| 台北市| 沾化县| 霍邱县| 顺昌县| 江孜县| 西丰县| 泊头市| 巴中市| 安阳县| 达孜县| 宿州市| 左云县| 虹口区| 无棣县| 新宁县| 林州市| 嘉鱼县| 曲沃县| 千阳县| 扬州市|