android 手机截取长屏实例代码
发布时间 - 2026-01-11 02:02:00 点击率:次最近项目遇到一个需求:把当前页面保存到手机相册。想了想 我还不会呢,就百度了下大神的足迹,踏着大神的足迹,一路向前。废话不说,记录下,后期学习。
public class ScreenUtils {
/**
* 截取scrollview的屏幕
* @param scrollView
* @return
*/
public static Bitmap getBitmapByView(ScrollView scrollView) {
int h = 0;
Bitmap bitmap = null;
// 获取scrollview实际高度
for (int i = 0; i < scrollView.getChildCount(); i++) {
h += scrollView.getChildAt(i).getHeight();
scrollView.getChildAt(i).setBackgroundColor(
Color.parseColor("#ffffff"));
}
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas(bitmap);
scrollView.draw(canvas);
return bitmap;
}
/**
* 截图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();
}
// 创建对应大小的bitmap
bitmap = Bitmap.createBitmap(listView.getWidth(), h,
Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(bitmap);
listView.draw(canvas);
return bitmap;
}
/**
* 压缩图片
* @param image
* @return
*/
public static Bitmap compressImage(Bitmap image) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
int options = 100;
// 循环判断如果压缩后图片是否大于250K,大于继续压缩
while (baos.toByteArray().length / 1024 > 1024 && options >10) {
// 重置baos
baos.reset();
// 这里压缩options%,把压缩后的数据存放到baos中
image.compress(Bitmap.CompressFormat.JPEG, options, baos);
// 每次都减少10
options -= 10;
}
// 把压缩后的数据baos存放到ByteArrayInputStream中
ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
// 把ByteArrayInputStream数据生成图片
Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
return bitmap;
}
/**
* 保存到sdcard
* @param b
* @return
*/
public static String savePic(Context context, Bitmap b) {
File outfile = new File("/sdcard/image");
// 如果文件不存在,则创建一个新文件
if (!outfile.isDirectory()) {
try {
outfile.mkdir();
} catch (Exception e) {
e.printStackTrace();
}
}
String fname = outfile + "/" + System.currentTimeMillis() + ".jpg";
FileOutputStream fos = null;
try {
fos = new FileOutputStream(fname);
if (null != fos) {
b.compress(Bitmap.CompressFormat.JPEG, 90, fos);
fos.flush();
fos.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 其次把文件插入到系统图库
try {
MediaStore.Images.Media.insertImage(context.getContentResolver(),
outfile.getAbsolutePath(), fname, null);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 最后通知图库更新
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fname)));
return fname;
}
}
以上为百度的工具类。
使用方法:
ScreenUtils
.savePic(XXXActivity.this,ScreenUtils.compressImage(ScreenUtils
.getBitmapByView(XXXScrollView)));
好了,截取成功了!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 手机截取长屏
# 屏幕截取
# 截取手机屏幕
# Android Bitmap的截取及状态栏的隐藏和显示功能
# Android实现bitmap指定区域滑动截取功能
# 解析Android截取手机屏幕两种实现方案
# Android实现拍照截取和相册图片截取
# Android个人中心的头像上传
# 图片编码及截取实例
# Android 仿QQ头像自定义截取功能
# Android开发获取短信的内容并截取短信
# Android中截取当前屏幕图片的实例代码
# Android截取视频帧并转化为Bitmap示例
# Android截取指定View为图片的实现方法
# 大神
# 好了
# 我还
# 不存在
# 想了
# 每次都
# 创建一个
# 大家多多
# 踏着
# 上为
# 后期
# 新文件
# Canvas
# final
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现数据库事务?(DB Facade示例)
详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
如何快速选择适合个人网站的云服务器配置?
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何用虚拟主机快速搭建网站?详细步骤解析
香港网站服务器数量如何影响SEO优化效果?
5种Android数据存储方式汇总
JavaScript常见的五种数组去重的方式
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
如何快速配置高效服务器建站软件?
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Linux后台任务运行方法_nohup与&使用技巧【技巧】
如何在万网主机上快速搭建网站?
七夕网站制作视频,七夕大促活动怎么报名?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
个人摄影网站制作流程,摄影爱好者都去什么网站?
奇安信“盘古石”团队突破 iOS 26.1 提权
如何快速启动建站代理加盟业务?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
再谈Python中的字符串与字符编码(推荐)
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
详解jQuery中基本的动画方法
如何快速搭建个人网站并优化SEO?
js实现点击每个li节点,都弹出其文本值及修改
Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】
*服务器网站为何频现安全漏洞?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Linux网络带宽限制_tc配置实践解析【教程】
HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】
大同网页,大同瑞慈医院官网?
Linux系统运维自动化项目教程_Ansible批量管理实战
C#如何调用原生C++ COM对象详解
Python制作简易注册登录系统
Laravel中的withCount方法怎么高效统计关联模型数量
北京网站制作的公司有哪些,北京白云观官方网站?
如何安全更换建站之星模板并保留数据?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel中的Facade(门面)到底是什么原理

