700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android截图-截屏与截长图(二)

Android截图-截屏与截长图(二)

时间:2019-09-02 20:10:10

相关推荐

Android截图-截屏与截长图(二)

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

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

// 获取指定Activity的截屏,保存到png文件public static Bitmap takeScreenShot(Activity activity) {// View是你需要截图的ViewView 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;}// 保存到sdcardpublic static void savePic(Bitmap b, String strFileName) {FileOutputStream fos = null;try {fos = new FileOutputStream(strFileName);if (null != fos) {press(pressFormat.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());// 创建对应大小的bitmapbitmap = 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) {press(pressFormat.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());// 创建对应大小的bitmapbitmap = 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) {press(pressFormat.PNG, 100, out);out.flush();out.close();}} catch (IOException e) {}return bitmap;}// 程序入口 截取ScrollViewpublic static void shootScrollView(ScrollView scrollView,String picpath) {ScreenShot.savePic(getScrollViewBitmap(scrollView, picpath), picpath);}// 程序入口 截取ListViewpublic static void shootListView(ListView listView,String picpath) {ScreenShot.savePic(getListViewBitmap(listView,picpath), picpath);}

截长图的效果图:

Demo在GitHub的地址:

/Hebin320/ScreenShoot

Demo在CSDN上的下载地址:

/detail/hebin320320/9721970

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。