安卓截图代码 安卓截取长屏代码

来源:互联网 发布:shein 知乎 编辑:程序博客网 时间:2024/05/01 22:31

在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);    }

当视图超过一个屏幕的时候,可能是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);    }

“`这里写图片描述

2 0
原创粉丝点击