android抓屏

现在无论是应用,还是游戏中,都经常会有分享的功能。分享,不仅要分享文字,也要分享应用或者游戏的屏幕截图,这样才能做到图文并茂,吸引到更多的用户。

想要做图片的分享功能,首先就需要抓屏,将当前屏幕保存为一个图片文件。

下面就是一个将当前的Activity直接保存为一个图片文件的类库,可以直接使用。需要的,直接拿来主义就好了。

package com.gaolei.framework.android.util;  
 
import java.io.File;  
import java.io.FileNotFoundException;  
import java.io.FileOutputStream;  
import java.io.IOException;  
 
import android.app.Activity;  
import android.graphics.Bitmap;  
import android.graphics.Rect;  
import android.view.View;  
 
public class ScreenShot {  
 
 private 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;  
 
 // 获取屏幕长和高 
 int width = activity.getWindowManager().getDefaultDisplay().getWidth();  
 int height = activity.getWindowManager().getDefaultDisplay()  
                .getHeight();  
 // 去掉标题栏 
        Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height  
                - statusBarHeight);  
        view.destroyDrawingCache();  
 return b;  
    }  
 
 private static void savePic(Bitmap b, File filePath) {  
        FileOutputStream fos = null;  
 try {  
            fos = new FileOutputStream(filePath);  
 if (null != fos) {  
                b.compress(Bitmap.CompressFormat.PNG, 100, fos);  
                fos.flush();  
                fos.close();  
            }  
        } catch (FileNotFoundException e) {  
 // e.printStackTrace(); 
        } catch (IOException e) {  
 // e.printStackTrace(); 
        }  
    }  
 
 public static void shoot(Activity a, File filePath) {  
 if (filePath == null) {  
 return;  
        }  
 if (!filePath.getParentFile().exists()) {  
            filePath.getParentFile().mkdirs();  
        }  
        ScreenShot.savePic(ScreenShot.takeScreenShot(a), filePath);  
    }  
}  
 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • android PakageManagerService启动流程分析

    PakageManagerService的启动流程图 ? 1.PakageManagerService概述 PakageManagerService是andro...

    xiangzhihong
  • android bitmap的内存分配和优化

    首先Bitmap在Android虚拟机中的内存分配,在Google的网站上给出了下面的一段话  ? 大致的意思也就是说,在Android3.0之前,Bitmap...

    xiangzhihong
  • 获取手机短信内容

    原理是通过,contentprovider获取系统短信数据库中的字段信息而达到获取内容目的 效果图如下: ? 具体代码如下: package com.inter...

    xiangzhihong
  • Kotlin + Spring Boot (Gradle) + React.js (Nowa) 集成 Web 开发

    Kotlin + Spring Boot (Gradle) + React.js (Nowa) 集成 Web 开发

    一个会写诗的程序员
  • flask flask-login使用笔记(flask 55)

    <pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: bre...

    用户5760343
  • 最近做大数据面试官的感想

    Spark学习技巧
  • 谷歌提出元奖励学习,两大基准测试刷新最优结果

    并且在解决诸如:玩视频游戏、连续控制和机器人学习等具有挑战性的任务方面,取得了显着成功。

    新智元
  • Python介绍RabbitMQ使用篇二

    上一篇我们使用C#语言讲解了单个消费者从消息队列中处理消息的模型,这一篇我们使用Python语言来讲解多个消费者同时工作从一个Queue处理消息的模型。

    py3study
  • 使用Java 8的二元函数BiFunction,采用函数式编程思维实现List元素的自定义排序功能

    Jerry Wang
  • 12 个UX设计师典型面试问题 · 助你通过面试

    这里有几个典型的UX设计师面试问题,如果你想成功通过你的面试,建议你仔细阅读并做好事前准备。

    宇相

扫码关注云+社区

领取腾讯云代金券