美文网首页
android截当前屏

android截当前屏

作者: xxnan | 来源:发表于2018-08-09 19:37 被阅读0次

怎样获取当前屏并保存成为图片?

思路有两个:


1 可以利用android为了提高滚动等各方面的绘制速度,为每一个view创建了一个缓存,使用     View.buildDrawingCache方法可以获取相应view的cache,这个cache就是一个bitmap对象。

2 通过查看View的源码发现有一个方法createSnapshot,但是它是@hide隐藏的,但是我们可以通过反射的      方法调用可以拿到Bitmap。


下面就两个思路分别写两个方法获取当前屏幕的Bitmap:

/**

* 可以利用android为了提高滚动等各方面的绘制速度,为每一个view创建了一个缓存,使用    View.buildDrawingCache方法可以获取相应view的cache,这个cache就是一个bitmap对象

* @return Bitmap

*/

private BitmapscreenShotWholeScreen() {

View dView = getWindow().getDecorView().getRootView();//拿到当前屏幕的rootview

    dView.setDrawingCacheEnabled(true);

    dView.buildDrawingCache();

    Bitmap bitmap = dView.getDrawingCache();

    return bitmap;

}


/**

* 通过查看View的源码发现有一个方法createSnapshot,但是它是@hide隐藏的,但是我们可以通过反射方法调用可以拿到Bitmap。

* @return Bitmap

*/

private BitmapgetScreenBitMap() {

View rootView = getWindow().getDecorView().getRootView();//拿到当前屏幕的rootview

    Bitmap bitmap=null;

    try {

final Method createSnapshot = View.class.getDeclaredMethod("createSnapshot", Bitmap.Config.class, Integer.TYPE, Boolean.TYPE);

        createSnapshot.setAccessible(true);

        bitmap = (Bitmap) createSnapshot.invoke(rootView, Bitmap.Config.RGB_565, Color.WHITE, false);

    }catch (final NoSuchMethodException e) {

Log.e(TAG, "Can't call createSnapshot, will use drawCache", e);

    }catch (final IllegalArgumentException e) {

Log.e(TAG, "Can't call createSnapshot with arguments", e);

    }catch (final InvocationTargetException e) {

Log.e(TAG, "Exception when calling createSnapshot", e);

    }catch (final IllegalAccessException e) {

Log.e(TAG, "Can't access createSnapshot, using drawCache", e);

    }catch (final ClassCastException e) {

Log.e(TAG, "createSnapshot didn't return a bitmap?", e);

    }

return bitmap;

}


有可能在getDrawingCache()可能为null的情况,那么可以rootView重新测量,布局

rootView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));

rootView.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());

以上是两种截当前屏幕的方式,后续看截长屏...

相关文章

  • android截当前屏

    怎样获取当前屏并保存成为图片? 思路有两个: 1 可以利用android为了提高滚动等各方面的绘制速度,为每一个v...

  • android 截屏实现

    Android 截屏分为四种:View 截屏、WebView 截屏、系统截屏 和 adb 截屏 1、View 截屏...

  • Android 截屏方式整理

    Android 实现截屏方式整理 可能的需求: 截自己的屏 截所有的屏 带导航栏截屏 不带导航栏截屏 截屏并编辑选...

  • 安卓截图笔记

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后...

  • Android截屏方案

    Android截屏 Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后...

  • (最新)iOS截屏

    ios webview 截屏:ios截屏 前言:介绍一下截屏有很多种做法1:截当前屏幕内容2:截整个视图的所有内容...

  • 基于MediaProjection实现Android移动手机截屏

    Android软件应用经常要求实现截屏和录屏的功能,那么如何实现Android软件截屏和录屏功能呢?本文将介绍基于...

  • Android设置当前界面不可截屏

  • ios MobileVLCKit的截屏和录屏功能

    第一、截屏功能 项目需求,点击截屏按钮,对当前直播页面截屏并且保存到相册。 MobileVLCKit这个库本身有提...

  • iOS 截屏&长截屏

    截屏在 iOS 开发中经常用到,本篇文章讲的是监听用户截屏操作,并且获取截屏图片,如果当前是UIScrollVie...

网友评论

      本文标题:android截当前屏

      本文链接:https://www.haomeiwen.com/subject/eavcbftx.html