Android实现截屏与截长图功能详解
创作时间:
作者:
@小白创作中心
Android实现截屏与截长图功能详解
引用
CSDN
1.
https://blog.csdn.net/Android23333/article/details/139112758
在Android开发中,有时需要实现截屏功能,比如将当前屏幕或长列表分享到社交媒体。本文将详细介绍如何在Android中实现截屏和截长图功能,并提供具体的代码示例。
截取当前屏幕
要截取当前屏幕并保存到内存卡,可以使用以下代码:
// 获取指定Activity的截屏,保存到png文件
public static Bitmap takeScreenShot(Activity activity) {
// View是你需要截图的View
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap b1 = view.getDrawingCache();
// 获取状态栏高度
Rect frame = new Rect();
activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
System.out.println(statusBarHeight);
// 获取屏幕长和高
int width = activity.getWindowManager().getDefaultDisplay().getWidth();
int height = activity.getWindowManager().getDefaultDisplay()
.getHeight();
// 去掉标题栏
// Bitmap b = Bitmap.createBitmap(b1, 0, 25, 320, 455);
Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height
- statusBarHeight);
view.destroyDrawingCache();
return b;
}
// 保存到sdcard
public static void savePic(Bitmap b, String strFileName) {
FileOutputStream fos = null;
try {
fos = new FileOutputStream(strFileName);
if (null != fos) {
b.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.flush();
fos.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 程序入口 截取当前屏幕
public static void shootLoacleView(Activity a,String picpath) {
ScreenShot.savePic(ScreenShot.takeScreenShot(a), picpath);
}
截取ScrollView和ListView
当视图超过一个屏幕时,可以使用以下代码截取ScrollView或ListView:
/**
* 截取scrollview的屏幕
* **/
public static Bitmap getScrollViewBitmap(ScrollView scrollView,String picpath) {
int h = 0;
Bitmap bitmap;
// 获取listView实际高度
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
}
Log.d(TAG, "实际高度:" + h);
Log.d(TAG, " 高度:" + scrollView.getHeight());
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
// 测试输出
FileOutputStream out = null;
try {
out = new FileOutputStream(picpath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if (null != out) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
}
} catch (IOException e) {
}
return bitmap;
}
private static String TAG = "Listview and ScrollView item 截图:";
/**
* 截图listview
* **/
public static Bitmap getListViewBitmap(ListView listView,String picpath) {
int h = 0;
Bitmap bitmap;
// 获取listView实际高度
for (int i = 0; i < listView.getChildCount(); i++) {
h += listView.getChildAt(i).getHeight();
}
Log.d(TAG, "实际高度:" + h);
Log.d(TAG, "list 高度:" + listView.getHeight());
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(listView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
listView.draw(canvas);
// 测试输出
FileOutputStream out = null;
try {
out = new FileOutputStream(picpath);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
if (null != out) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
}
} catch (IOException e) {
}
return bitmap;
}
// 程序入口 截取ScrollView
public static void shootScrollView(ScrollView scrollView,String picpath) {
ScreenShot.savePic(getScrollViewBitmap(scrollView, picpath), picpath);
}
// 程序入口 截取ListView
public static void shootListView(ListView listView,String picpath) {
ScreenShot.savePic(getListViewBitmap(listView,picpath), picpath);
}
效果图
截长图的效果图如下:
以上就是Android实现截屏与截长图功能的具体代码实现。希望对大家的学习有所帮助。
热门推荐
探秘重庆金佛山:喀斯特明珠的魅力密码
肺结节,不纠结,今天帮您解心结!
齿轮泵、叶片泵、柱塞泵的原理、应用场景与性能对比
防晒伞材质选择攻略:抵御紫外线侵害!
乙木生于酉月七杀不透解析,春天乙木的特点
乱吃右归丸的危害有哪些
养老金领取指南:退休年龄和缴费年限全解析
IT行业项目经理简历撰写指南
1937年,蒋经国回国,生母毛福梅给他发电报:要叫宋美龄“姆妈”
茂名古驿道•化州篇(往东)
减肚子的 6 个小技巧,越早知道越好(全是大实话)
针灸的作用机制及研究进展
人工智能能否替代医生这样的职业?
家用高压锅压力详解:工作压力范围与温度关系
网络维护协议范本:企业信息安全的守护者
手工吐司配方大公开!爸爸糖,糖先生,三个叔叔等品牌同款原味吐司!
第一季度青岛招聘月均工资9351元 薪酬中位数7500元
CAR-NK药物作用机制和药效学研究——细胞因子检测
无需额外电池的太阳能淡化系统,可低成本提供饮用水
带卡簧槽深沟球轴承与不带卡簧槽的区别
坐骨神经痛的成因、治疗与预防
20万就能克隆你的宠物,为什么网友觉得丧心病狂?
学历学位在求职中有哪些影响
怎么查过敏原
沈阳故宫的建筑布局与文化内涵
商家被"仅退款"如何维权?这份全攻略请收好
DeepSeek-R1 技术深度解析:强化学习驱动的推理能力提升
非独立董事:公司治理中的关键角色
停不下来的“手舞足蹈”? 原来是尿毒症脑病在作祟
一文攻略法考!@2025年考生,关于法考你想知道的都在这里!