Android给scrollView截图超过屏幕大小形成长图
很多的时候,我们想要分享一个界面的所有内容,可是内容太多,超过了屏幕的大小,简单的截屏已经满足不了我们的需要,这时候我们就可以根据布局里scrollView的高度来截取图片。
代码如下:
- /**
- * 截取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;
- }
- /**
- * 压缩图片
- * @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;
- // 循环判断如果压缩后图片是否大于100kb,大于继续压缩
- while (baos.toByteArray().length / 1024 > 100) {
- // 重置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(Bitmap b) {
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss",
- Locale.US);
- File outfile = new File("/sdcard/image");
- // 如果文件不存在,则创建一个新文件
- if (!outfile.isDirectory()) {
- try {
- outfile.mkdir();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- String fname = outfile + "/" + sdf.format(new Date()) + ".png";
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(fname);
- if (null != fos) {
- b.compress(Bitmap.CompressFormat.PNG, 90, fos);
- fos.flush();
- fos.close();
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return fname;
- }
在需要用到的地方调用getBitmapByView()方法 即可:
- String fname = ScreenShot.savePic(ScreenShot.getBitmapByView(scrollView));
但是这样写的话有时候会因为截取的图片太长太大而报outofmemory的错,所以为了避免内存溢出,程序崩掉,要注意用Config.RGB_565,会比ARGB_8888少占内存。还有就是把图片压缩一下,至少我这样就没有报oom的错了,即:
- String fname = ScreenShot.savePic(ScreenShot.compressImage(ScreenShot
- .getBitmapByView(scrollView)));
Android给scrollView截图超过屏幕大小形成长图相关推荐
- 教你怎么图片等比例放大缩小超过屏幕大小
我就是那个帖子的楼主并且是版主,希望以后和大家多交流,我是南京诚迈公司的,叫廖建国,在ES2部分. 之前看到好多人问一个问题:怎么图片等比例放大或缩小超过屏幕大小,主要是后面超过屏幕大小,我一直没看到 ...
- Android Developers:支持不同的屏幕大小
这节课程向你展示了通过如下方式支持不同的屏幕大小: 确保你的布局能适当地调整大小来适应屏幕 根据屏幕的配置提供适当的UI布局 确保正确的布局被应用到正确的屏幕 提供正确缩放的位图 使用"wr ...
- Android针对不同的手机屏幕大小设计图片资源与编码
一些术语 Screen Size 屏幕尺寸: 实际的物理尺寸,以屏幕的对角线为准(包括通知栏?) 将所有的实际尺寸分为四个广义的尺寸:small(小),normal(正常),large(大),extr ...
- Android中如何获取手机屏幕大小
我们可以通过使用类DisplayMetrics来获取手机屏幕的分辨率大小.DisplayMetrics类是获取手机屏幕各种属性的关键类.下面通过例子来展示如何获取手机屏幕的分辨率. 在布局文件main ...
- android大屏适配_Android屏幕大小适配问题解决
严格来说,作为读者,你应该带着批判性质的眼光来看这篇文章,此文章依据本人对Android官方开发资料<Supporting Multiple Screens>的阅读.实践以及和开发人员的沟 ...
- snipaste滚动截图方法_老板让你把整个网页截图形成长图,具体怎么做?
近几天,我们制作的网页告一段落,老板让发个效果图让他看一下,可是系统自带的printscreen按键只能截当前屏幕,还需要到PS中拼合,用微信.钉钉自带的截图功能也不好用,都要拼合,那么好用的截图软件 ...
- android 常用机型尺寸_Android中获取手机屏幕大小的方法
本文为大家解析Android中如何获取手机屏幕大小,提供一个解决方法,分享给大家供大家参考,具体内容如下 运行效果图: 运行程序后,当我们点击Button按钮时,可以看到下面的效果图: 具体代码: 我 ...
- Android 获得手机屏幕大小
Android在自定义控件时,经常需要获得屏幕的宽高,每次都要写,不妨直接把他封装成工具类,直接拿来用,废话不说,直接上代码 /*** */ package com.example.customvie ...
- Android自适应屏幕大小和布局
一:不同的layout Android手机屏幕大小不一,有480x320, 640x360, 800x480,854x480.怎样才能让App自动适应不同的屏幕呢? 其实很简单,只需要在res目录下 ...
最新文章
- 你太菜了,竟然不知道Code Review...
- android 使用jar里 aidl,Android Studio中用gradle打包带AIDL文件的jar文件
- jq获取img高度(动态生成的image高度为0原因)
- 2021夏季每日一题 【week6 完结】
- Python中zip()函数的解释和可视化
- tmux多窗口工具基本操作
- git 列出标签_Git标签介绍:如何在Git中列出,创建,删除和显示标签
- 有木有使用tomcat 7.0 报Out of Memory的同志
- Java集合(四) LinkedList详解
- java 复写hashcode_java 重写equals()和hashCode()
- 很好的一篇讲解sql优化的文章
- 计算机专业考研英语二国家线多少分,2020考研国家线:英语二的分数线是多少...
- Android四大组件之Service
- 2017网易校招:Fibonacci数列
- 怎么注册一个docker id
- App Tamer for Mac v2.6 应用CPU使用率管理
- 2021年初级会计职称《初级会计实务》考试真题
- 《蜂鸟摄影学院单反摄影宝典》读书笔记
- 宅男福利!爬虫实战,爬取原神真人c图片并保存,谁的老婆快抱走
- 创建本地的https证书
热门文章
- Best Efforts 1PC 跨库事务
- 微软 .NET Core 3.0 版本发布
- 米小爱团队负责人王刚:语音交互背后,有多少人工就有多少智能
- java短信验证码实现_社交APP开发短信验证是通过什么技术实现
- aliyun gradle 代理_gradle:现代高效的java构建工具
- 概要设计说明书任务分配
- 类中的三个装饰器方法
- 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
- codeforces 496 E. Distributing Parts(贪心+set二分)
- 条款2.	最好使用C++转型操作符