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实现截屏与截长图功能的具体代码实现。希望对大家的学习有所帮助。
热门推荐
云南易武镇:普洱生茶助力乡村振兴
普洱生茶:千年古法的现代魅力
沿着合那高速的最美自驾路线推荐
合那高速自驾游打卡德天跨国大瀑布
合那高速建设提速:广西对接东盟的重要通道
高情商的人,是怎么拒绝别人的
美国彩票监管经验对中国有何启示?
海南体彩揭秘:公正摇奖全过程
马宏俊教授详解:如何通过法律手段确保彩票公正性
彩票公正性引发金融市场热议,科技助力提升公信力
跟着白居易学养生
中国真正的国酒:黄酒的复兴与未来
昆明到石家庄高铁攻略:G72 vs G402,哪个更划算?
G71次列车:北京西至昆明南最快直达方案
元旦高铁游云南:昆明周边必打卡景点
这 4 种走路姿势,让你关节变形、身体歪斜!
有氧运动有哪些?做有氧运动有哪些好处?
全球多地核果市场报告:油桃、桃子等产量与销售情况概览
追寻美食背后的中华文化 读《宴飨万年:文物中的中华饮食文化史》
三国风云:十大战役深度解析
岗位价值评估怎么进行?
番茄工作法:打造高效课堂的3小时教学攻略
新手讲师必看:3小时课程设计秘籍
牛茄子:美丽背后的致命诱惑
清明节警惕牛茄子中毒!
婚姻心理咨询:争吵后妻子离家出走,如何挽回?
基因编辑:人类外貌改造的未来之路
古风仙气女孩名推荐:诗词中的绝美女主
如何在 GitHub 看源代码学习
从文化视角解读催婚现象背后的社会变迁