问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android实现截屏与截长图功能详解

创作时间:
作者:
@小白创作中心

Android实现截屏与截长图功能详解

引用
CSDN
1.
https://blog.csdn.net/Android23333/article/details/139112758

在Android开发中,有时需要实现截屏功能,比如将当前屏幕或长列表分享到社交媒体。本文将详细介绍如何在Android中实现截屏和截长图功能,并提供具体的代码示例。

截取当前屏幕

要截取当前屏幕并保存到内存卡,可以使用以下代码:

// 获取指定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);
}

截取ScrollView和ListView

当视图超过一个屏幕时,可以使用以下代码截取ScrollView或ListView:

/**
 * 截取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);
}

效果图

截长图的效果图如下:

以上就是Android实现截屏与截长图功能的具体代码实现。希望对大家的学习有所帮助。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号