Android中通過view方式獲取當(dāng)前Activity的屏幕截圖實(shí)現(xiàn)方法
此方法是通過view的方式獲取當(dāng)前activity的屏幕截圖,并不是framebuffer的方式,所以有一定的局限性。但是這種方法相對(duì)簡單,容易理解。
首先通過下面的函數(shù)獲取Bitmap格式的屏幕截圖:
public Bitmap myShot(Activity activity) {
// 獲取windows中最頂層的view
View view = activity.getWindow().getDecorView();
view.buildDrawingCache();
// 獲取狀態(tài)欄高度
Rect rect = new Rect();
view.getWindowVisibleDisplayFrame(rect);
int statusBarHeights = rect.top;
Display display = activity.getWindowManager().getDefaultDisplay();
// 獲取屏幕寬和高
int widths = display.getWidth();
int heights = display.getHeight();
// 允許當(dāng)前窗口保存緩存信息
view.setDrawingCacheEnabled(true);
// 去掉狀態(tài)欄
Bitmap bmp = Bitmap.createBitmap(view.getDrawingCache(), 0,
statusBarHeights, widths, heights – statusBarHeights);
// 銷毀緩存信息
view.destroyDrawingCache();
return bmp;
}
得到bitmap格式的圖片后,可以把它保存到sd卡中,也可以用下面的方式直接顯示到ImageView上:
// 將bitmap轉(zhuǎn)換成drawable
BitmapDrawable bd=new BitmapDrawable(myShot());
imageView.setBackgroundDrawable(bd);
imageView.setImageBitmap(myShot());
如果想寫入sd中保存,可以使用下面的方法:
private void saveToSD(Bitmap bmp, String dirName,String fileName) throws IOException {
// 判斷sd卡是否存在
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
File dir = new File(dirName);
// 判斷文件夾是否存在,不存在則創(chuàng)建
if(!dir.exists()){
dir.mkdir();
}
File file = new File(dirName + fileName);
// 判斷文件是否存在,不存在則創(chuàng)建
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
if (fos != null) {
// 第一參數(shù)是圖片格式,第二個(gè)是圖片質(zhì)量,第三個(gè)是輸出流
bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
// 用完關(guān)閉
fos.flush();
fos.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
dirName是輸出的文件夾名稱,filaName是輸出的文件名,兩者共同組成輸出的路徑,如“ /mnt/sdcard/pictures/shot.png”。還要注意在AndroidManifest中注冊(cè)寫入權(quán)限:
<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE” />
相關(guān)文章
Android 實(shí)現(xiàn)截屏功能的實(shí)例
這篇文章主要介紹了Android 實(shí)現(xiàn)截屏功能的實(shí)例的相關(guān)資料,這里實(shí)現(xiàn)截屏的實(shí)例在代碼中注釋非常清楚,希望能幫助到大家,需要的朋友可以參考下2017-08-08
Android優(yōu)化提升應(yīng)用啟動(dòng)速度及Splash頁面的設(shè)計(jì)
這篇文章主要介紹了Android性能優(yōu)化的一些相關(guān)資料,文章圍繞提升應(yīng)用啟動(dòng)速度及Splash頁面的設(shè)計(jì)的內(nèi)容展開介紹,需要的朋友可以參考一下,希望對(duì)你有所幫助2021-12-12
Android利用代碼控制設(shè)備上其他音樂播放器的方法
這篇文章主要給大家介紹了關(guān)于Android利用代碼如何控制設(shè)備上其他音樂播放器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06
Android實(shí)現(xiàn)微信分享帶有縮略圖的網(wǎng)頁
最近做了一個(gè)web app的項(xiàng)目,要求分享web頁還要帶有圖片功能,怎么實(shí)現(xiàn)呢?今天小編給大家分享android實(shí)現(xiàn)微信分享帶有縮略圖的網(wǎng)頁功能,需要的朋友參考下2017-02-02
Android實(shí)現(xiàn)動(dòng)態(tài)改變app圖標(biāo)的示例代碼
本篇文章主要介紹了Android實(shí)現(xiàn)動(dòng)態(tài)改變app圖標(biāo)的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
Flutter源碼分析之自定義控件(RenderBox)指南
寫了兩天的flutter,發(fā)現(xiàn)控件樣式很多,flutter資源很少,本文在于實(shí)用性,可以減少頁面代碼,下面這篇文章主要介紹了Flutter源碼分析之自定義控件(RenderBox)的相關(guān)資料,需要的朋友可以參考下2021-08-08

