截屏与截长图功能的实现

来源:互联网 发布:origin软件官方下载 编辑:程序博客网 时间:2024/05/29 03:52

Demo在GitHub的地址:

https://github.com/Hebin320/ScreenShoot

Demo在CSDN上的下载地址:

http://download.csdn.net/detail/hebin320320/9721970


在Android开发中,有时候会遇到需要截屏分享到朋友圈或者QQ,截屏有截取当前屏幕,也有需要截取不仅一个屏幕,可能会很长。

截取当前屏幕并保存到内存卡的方法:

// 获取指定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);    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

当视图超过一个屏幕的时候,可能是listview,也可能是Scrollview,这时候,其实截图就是对listview或者Scrollview进行截图:

 /**     * 截取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);    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

截长图的效果图:
这里写图片描述

原创粉丝点击