Android獲取當前桌面桌布

2021-08-27 02:34:54 字數 1405 閱讀 6301

這段時間專案有需求要獲取桌面的桌布來設成背景,發現網上很多同學都通過wall*****manager的getdrawable等api來獲取,這樣的確能獲得到桌布,但是要稍微注意一下。

桌面的桌布可是很大很大的一張哦,你要直接用來設定成背景,那可是很醜的。所以我們需要稍微處理一下。

大致思路就是把一張桌布切成幾片,當前螢幕對應那片,我們就要那片。上個圖:

// 獲取桌布管理器

wall*****manager wall*****manager = wall*****manager

.getinstance(mcontext);

// 獲取當前桌布

drawable wall*****drawable = wall*****manager.getdrawable();

// 將drawable,轉成bitmap

bitmap bm = ((bitmapdrawable) wall*****drawable).getbitmap();

// 需要詳細說明一下,mscreencount、getcurrentworkspacescreen()、mscreenwidth、mscreenheight分別

//對應於launcher中的桌面螢幕總數、當前螢幕下標、螢幕寬度、螢幕高度.等下拿demo的哥們稍微要注意一下

float step = 0;

// 計算出螢幕的偏移量

step = (bm.getwidth() - launcherpreferencemodel.mscreenwidth)

/ (launcherpreferencemodel.mscreencount - 1);

// 擷取相應螢幕的bitmap

bitmap pbm = bitmap.createbitmap(bm, (int) (mlauncher

.getcurrentworkspacescreen() * step), 0,

(int) (launcherpreferencemodel.mscreenwidth),

(int) (launcherpreferencemodel.mscreenheight));

// 設定 背景

layout.setbackgrounddrawable(new bitmapdrawable(pbm));

測試環境,我的手機是moto 526,螢幕共7屏,現在咱取第六屏,效果如下

獲取桌面桌布作為App背景

這樣做當然是可以,但是發現背景圖會被嚴重壓縮,跟桌面上的桌布效果相差太大。用各種壓縮,拉伸,裁剪都不起作用,簡直要抓狂啊。後來想,launcher裡面既然可以做到,為何不模仿launcher的做法呢?於是檢視launcher設定桌布的原始碼,發現自定義了乙個drawable override pub...

框架 MFC 修改桌面 桌布

功 能 使用 iactivedesktop 介面獲取 設定和重新整理桌面背景 桌布 開發環境 vc vs2005 vs2008 vs2010 vs2012 vs2013 新建專案 mfc應用程式 基於對話方塊 include include shlobj.h shlwapi.h 包含了對檔案判別的a...

爬蟲爬取桌面桌布

import requests from bs4 import beautifulsoup import os import time import random import useragent interval 3 爬取的間隔時間 firstdir d netbian 總路徑 classific...