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实现截屏与截长图功能的具体代码实现。希望对大家的学习有所帮助。
热门推荐
如何有效进行问题汇报?——提升工作效率的关键技巧
如何提高肺活量?13种实用方法让你拥有惊人肺活量
如何测试网速?最好的工具和方法推荐
夏天的18个雅称,你最中意哪一个?
三文鱼头怎么做好吃又简单家常的
中性粒细胞增多:身体健康的隐秘信号,你读懂了吗?
3D打印高达模型全过程详解
茉莉花茶的冲泡方法,茉莉花茶冲泡方式是什么
戏说漫谈“中国相声三大表演体系”,传统、现代和三俗
数据标注的工作流程与挑战
Excel日期全变成数字怎么变回去
常见的肺部疾病有哪些种类和症状
间质性肺炎影像学表现
三文鱼头,美味大揭秘!
如何在Windows 10中安全打开和修改注册表的详细指南
汽车点火的正确步骤是什么?
手指为什么突然肿起来
轴承的选择方法:从条件到步骤的全面指南
以和弦音为目标,使独奏与背景音乐保持联系
解密道家版八段锦
1.5T vs 2.0T:马力对决与能效比拼
古代春节“穷人放鞭炮,富人看热闹”:习俗背后的阶层差异与文化传承
什么是银团贷款?起源、特点与优势全解析
罗翔老师反复推荐的5本书,让我们读懂人性!
SOHO公寓的定义是什么?
如何制定高效的工作周计划表,让你的每周都井井有条?
大客户应收款管理指南:从信用政策到数字化转型
谷建芬:半生心血铸就音乐辉煌,却难掩家庭遗憾
动感单车减脂全攻略:从选购到高效燃脂,避开这4大坑瘦更快
父母离婚后没有抚养权的一方还是监护人吗