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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android仿苹果悬浮窗,Android仿IOS悬浮拖动按钮

發布時間:2024/3/26 Android 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android仿苹果悬浮窗,Android仿IOS悬浮拖动按钮 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拖動效果

開發是我們有時候需要一些快捷通道,類似ios系統的拖動方塊。

Android6.0及其以上版本手機使用懸浮窗功能會正常使用,在23及以上版本下編譯,懸浮窗權限默認是關閉沒有權限,然在23以下版本下編譯懸浮窗權限是開啟有權限的。所以在大于23版本下編譯時需要去檢測懸浮窗權限,并且獲取懸浮窗權限,下面我就羅列下怎么去檢測懸浮窗權限并且獲取懸浮窗權限。

int version = Build.VERSION.SDK_INT;

// 懸浮窗Settings.canDrawOverlays獲取權限是否開通

if (version < 23 || (version >= 23 && Settings.canDrawOverlays(this))) {

//初始化小方塊的布局

initDragLayout();

return;

}

//彈出是否授權懸浮的dialog

AuthorizationDialogFragment dialogFragment = new AuthorizationDialogFragment();

dialogFragment.show(getSupportFragmentManager(), "AuthorizationDialogFragment");

dialogFragment.setClickListener(new AuthorizationDialogFragment.onClickListener() {

@Override

public void click(int type) {

if (type == 0) {

mainFastView.setVisibility(View.VISIBLE);

home_red_image.setVisibility(AppConstantUtils.isClickNewTask(context) ? View.GONE : View.VISIBLE);

} else {

try {

//同意開啟懸浮權限

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);

startActivityForResult(intent, 10);

} catch (Exception e) {

}

}

}

});

授權dialog

系統授權界面.jpg

授權之后返回

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (requestCode == 10) {

if (Build.VERSION.SDK_INT >= 23) {

if (Settings.canDrawOverlays(this)) {

//初始化小方塊的布局

initDragLayout();

} else {

mainFastView.setVisibility(View.VISIBLE);

home_red_image.setVisibility(AppConstantUtils.isClickNewTask(context) ? View.GONE : View.VISIBLE);

}

}

}

}

@SuppressLint("ResourceAsColor")

public void showAddress() {

if (AppConstantUtils.hasFastButton(this) && null != fast_image) return;

SPUtils.put(this, "hasFastButton", "hasFastButton");

wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE);

params = ((App) getApplicationContext()).getMywmParams();

fast_image = LayoutInflater.from(getApplicationContext()).inflate(R.layout.fast_market_layout, null);

fast_image.findViewById(R.id.image).setAlpha(0.68f);

params.gravity = Gravity.LEFT | Gravity.TOP;

params.x = (int) SPUtils.get(this, "lastx", 4 * ScreenUtils.getScreenWidth(this) / 5);

params.y = (int) SPUtils.get(this, "lasty", 2 * ScreenUtils.getScreenHeight(this) / 3);

params.height = ScreenUtils.dp2px(this, 48f);

params.width = ScreenUtils.dp2px(this, 48f);

View red_image = fast_image.findViewById(R.id.red_image);

red_image.setVisibility(AppConstantUtils.isClickNewTask(context) ? View.GONE : View.VISIBLE);

// 定義控件 可以觸摸 刪除一個flag

params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;

// | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;

params.format = PixelFormat.TRANSLUCENT;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {//API26

params.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;

} else {

params.type = WindowManager.LayoutParams.TYPE_PHONE;

}

wm.addView(fast_image, params);

fast_image.setOnTouchListener(new View.OnTouchListener() {

int startX;

int startY;

long startTime;

long endTime;

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

startX = (int) event.getRawX();

startY = (int) event.getRawY();

startTime = System.currentTimeMillis();

break;

case MotionEvent.ACTION_MOVE:

int newX = (int) event.getRawX();

int newY = (int) event.getRawY();

int dx = newX - startX;

int dy = newY - startY;

// 更改view對象在窗體上顯示的位置.

params.x += dx;

params.y += dy;

if (params.x < 0) {

params.x = 0;

}

if (params.y < 0) {

params.y = 0;

}

if (params.x > wm.getDefaultDisplay().getWidth()) {

params.x = wm.getDefaultDisplay().getWidth();

}

if (params.y > wm.getDefaultDisplay().getHeight()) {

params.y = wm.getDefaultDisplay().getHeight();

}

wm.updateViewLayout(fast_image, params);

// 重新初始化手指的位置

startX = (int) event.getRawX();

startY = (int) event.getRawY();

break;

case MotionEvent.ACTION_UP:

SPUtils.put(BaseAcyivity.this, "lastx", params.x);

SPUtils.put(BaseAcyivity.this, "lasty", params.y);

endTime = System.currentTimeMillis();

if (endTime - startTime < 300) {

EventBus.getDefault().post(new MessageEvent("showFast"));

}

return false;

}

return true;

}

});

}

// 權限添加

總結

以上是生活随笔為你收集整理的android仿苹果悬浮窗,Android仿IOS悬浮拖动按钮的全部內容,希望文章能夠幫你解決所遇到的問題。

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