Android實(shí)現(xiàn)全屏截圖或長(zhǎng)截屏功能
本文實(shí)例為大家分享了Android實(shí)現(xiàn)全屏截圖或長(zhǎng)截屏功能的具體代碼,供大家參考,具體內(nèi)容如下
全屏截圖:
/**
* 傳入的activity是要截屏的activity
*/
public static Bitmap getViewBitmap(Activity activity) {
// View是你需要截圖的View
View view = activity.getWindow().getDecorView();
//這兩句必須寫,否則getDrawingCache報(bào)空指針
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b1 = view.getDrawingCache();
// 獲取狀態(tài)欄高度
Rect frame = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
// 獲取屏幕長(zhǎng)和高
int width = activity.getResources().getDisplayMetrics().widthPixels;
int height = activity.getResources().getDisplayMetrics().heightPixels;
// 去掉標(biāo)題欄
Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height - statusBarHeight);
view.destroyDrawingCache();
return b;
}
ScrollView或者ListView或者LinearLayout等ViewGroup的長(zhǎng)截圖:
public static Bitmap getViewGroupBitmap(ViewGroup viewGroup) {
//viewGroup的總高度
int h = 0;
Bitmap bitmap;
// 適用于ListView或RecyclerView等求高度
for (int i = 0; i < viewGroup.getChildCount(); i++) {
h += viewGroup.getChildAt(i).getHeight();
}
// 若viewGroup是ScrollView,那么他的直接子元素有id的話,如下所示:
// h = mLinearLayout.getHeight();
}
// 創(chuàng)建對(duì)應(yīng)大小的bitmap(重點(diǎn))
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
return bitmap;
}
總結(jié):
1. 布局為ScrollView,ListView,RecyclerView等能滑動(dòng)的,用for循環(huán)遍歷子元素求實(shí)際高度。
ps:ScrollView由于只能有一個(gè)直接子元素,那么我們可以直接用他的子元素來(lái)求高度。
2. 布局為L(zhǎng)inearLayout等ViewGroup,直接.getHeight()獲取
注意:
1. getHeight(),getWidth()不能直接在avtivity生命周期中調(diào)用,因?yàn)閍ctivity尚未生成完畢之前,控件的長(zhǎng)寬尚未測(cè)量,故所得皆為0
2. 用該方式實(shí)現(xiàn)長(zhǎng)截屏需要注意背景色的問(wèn)題,如果你的截圖背景色出了問(wèn)題,仔細(xì)檢查XML文件,看看該背景色是否設(shè)置在你截屏的控件中
補(bǔ)充:
對(duì)于混合布局比如說(shuō):根RelativeLayout布局中有ViewGroup+RelativeLayout等子布局,可以分別測(cè)量他們的高度并生成bitmap對(duì)象,然后拼接在一起即可。
/**
* 上下拼接兩個(gè)Bitmap,
* drawBitmap的參數(shù):1.需要畫的bitmap
* 2.裁剪矩形,bitmap會(huì)被該矩形裁剪
* 3.放置在canvas的位置矩形,bitmap會(huì)被放置在該矩形的位置上
* 4.畫筆
*/
public static Bitmap mergeBitmap_TB_My(Bitmap topBitmap, Bitmap bottomBitmap) {
int width = topBitmap.getWidth();
int height = topBitmap.getHeight() + bottomBitmap.getHeight();
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Rect rectTop = new Rect(0, 0, width, topBitmap.getHeight());
Rect rectBottomRes = new Rect(0, 0, width, bottomBitmap.getHeight());
RectF rectBottomDes = new RectF(0, topBitmap.getHeight(), width, height);
canvas.drawBitmap(topBitmap, rectTop, rectTop, null);
canvas.drawBitmap(bottomBitmap, rectBottomRes, rectBottomDes, null);
return bitmap;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android動(dòng)態(tài)使用VectorDrawable過(guò)程詳解
這篇文章主要介紹了Android動(dòng)態(tài)使用VectorDrawable過(guò)程,2014年6月26日的I/O 2014開(kāi)發(fā)者大會(huì)上谷歌正式推出了Android L,它帶來(lái)了全新的設(shè)計(jì)語(yǔ)言Material Design,新的API也提供了這個(gè)類VectorDrawable2023-02-02
Android 動(dòng)態(tài)添加Fragment的實(shí)例代碼
這篇文章主要介紹了Android 動(dòng)態(tài)添加Fragment的實(shí)例代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
使用Flutter實(shí)現(xiàn)一個(gè)走馬燈布局的示例代碼
這篇文章主要介紹了使用 Flutter 實(shí)現(xiàn)一個(gè)走馬燈布局的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Android使用文件進(jìn)行數(shù)據(jù)存儲(chǔ)的方法
這篇文章主要介紹了Android使用文件進(jìn)行數(shù)據(jù)存儲(chǔ)的方法,較為詳細(xì)的分析了Android基于文件實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)所涉及的相關(guān)概念與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
Android ExpandableListView長(zhǎng)按事件的完美解決辦法
本篇文章是對(duì)Android中ExpandableListView長(zhǎng)按事件的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Android中實(shí)現(xiàn)ProgressBar菊花旋轉(zhuǎn)進(jìn)度條的動(dòng)畫效果
大家在一些頁(yè)面經(jīng)常會(huì)遇到加載中需要顯示一個(gè)加載動(dòng)畫,像旋轉(zhuǎn)的菊花旋轉(zhuǎn)的圈圈動(dòng)畫效果,本文通過(guò)實(shí)例代碼給大家講解下,需要的朋友參考下吧2021-09-09
Android實(shí)現(xiàn)View滑動(dòng)的6種方式
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)View滑動(dòng)的6種方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法
這篇文章主要介紹了Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法,需要的朋友可以參考下2017-12-12
Android camera2 判斷相機(jī)功能是否可控的實(shí)例
下面小編就為大家?guī)?lái)一篇Android camera2 判斷相機(jī)功能是否可控的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03

