Android应用开发之android 第三方app截图
白羽 2018-08-10 来源 :网络 阅读 1181 评论 0

摘要:本文将带你了解Android应用开发之android 第三方app截图,希望本文对大家学Android有所帮助

        本文将带你了解Android应用开发之android 第三方app截图,希望本文对大家学Android有所帮助


将View生成相应的图片是很容易的,所以app内截图可以采用此种方式。
Java代码  view.setDrawingCacheEnabled(true);  view.buildDrawingCache();  Bitmap screenshot = view.getDrawingCache();  //使用完图片之后再执行destroyDrawingCache,因为destroyDrawingCache内部会调用bitmap.recycle()  view.destroyDrawingCache();  view.setDrawingCacheEnabled(false);  view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap screenshot = view.getDrawingCache();
//使用完图片之后再执行destroyDrawingCache,因为destroyDrawingCache内部会调用bitmap.recycle()
view.destroyDrawingCache();
view.setDrawingCacheEnabled(false);
拿到了bitmap之后,还需要对其进行处理,分为下面几个部分/几种情况:
1.状态栏
2.导航栏
3.魅族flyme的smartbar
 
对于状态栏,app是无法截图的,截出来只是状态栏底色,上面的通知和时间电量等信息是没有的,所以一般会去掉状态栏这一块
对于导航栏,这个是可以截到的,但是内容和app无关,只是3个按钮,可能也不好看,所以一般也会去掉
另外,魅族还有smartbar,一般也需要干掉
对于上面3条,我们只需要得知其高度即可,然后去除这几部分(这里没有考虑横屏)
Java代码  //width为截图宽度,height为最终的图片高度,即处理过状态栏/导航栏/smartbar之后的高度  //top为状态栏的高度  Bitmap bg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);  Canvas canvas = new Canvas(bg);  canvas.drawBitmap(screenshot, width, top, null);  screenshot.recycle();  //width为截图宽度,height为最终的图片高度,即处理过状态栏/导航栏/smartbar之后的高度
//top为状态栏的高度
Bitmap bg = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bg);
canvas.drawBitmap(screenshot, width, top, null);
screenshot.recycle();
 
下面是对于魅族的flyme特殊处理的部分
判断flyme系统
Java代码  /**  * 判断是否是魅族系统  * @return  */  public static boolean isFlyme() {      try {          // Invoke Build.hasSmartBar()          final Method method = Build.class.getMethod("hasSmartBar");          return method != null;      } catch (final Exception e) {          return false;      }  }  /**
 * 判断是否是魅族系统
 * @return
 */
public static boolean isFlyme() {
    try {
        // Invoke Build.hasSmartBar()
        final Method method = Build.class.getMethod("hasSmartBar");
        return method != null;
    } catch (final Exception e) {
        return false;
    }
}
获取smartbar高度
Java代码  //获取魅族smartbar高度  public static int getSmartBarHeight(Context context) {      try {          Class clazz = Class.forName("com.android.internal.R$dimen");          Object obj = clazz.newInstance();          Field field = clazz.getField("mz_action_button_min_height");          int height = Integer.parseInt(field.get(obj).toString());          return context.getResources().getDimensionPixelSize(height);      } catch (ClassNotFoundException e) {          Log.w(TAG, e);      } catch (InstantiationException e) {          Log.w(TAG, e);      } catch (IllegalAccessException e) {          Log.w(TAG, e);      } catch (NoSuchFieldException e) {          Log.w(TAG, e);      }      return 0;  }  //获取魅族smartbar高度
public static int getSmartBarHeight(Context context) {
    try {
        Class clazz = Class.forName("com.android.internal.R$dimen");
        Object obj = clazz.newInstance();
        Field field = clazz.getField("mz_action_button_min_height");
        int height = Integer.parseInt(field.get(obj).toString());
        return context.getResources().getDimensionPixelSize(height);
    } catch (ClassNotFoundException e) {
        Log.w(TAG, e);
    } catch (InstantiationException e) {
        Log.w(TAG, e);
    } catch (IllegalAccessException e) {
        Log.w(TAG, e);
    } catch (NoSuchFieldException e) {
        Log.w(TAG, e);
    }
    return 0;
}
如何获取状态栏/导航栏高度这里不再赘述
 
 
上面说的是一般情况,下面我们来说说几种特殊情况
1.如何截取dialog
如果直接在activity获取window中的DecorView,截取的图片实际是没有dialog部分的,只有dialog下面的页面。想要获取dialog截图,我们可以先获取dialog引用,然后获取
dialog.getWindow().getDecorView()
2.当页面没有占满屏幕时
举个例子,有的时候我们会把页面做成半窗形式,屏幕上方还能看到上一个页面的内容。这时activity只有屏幕下方那部分,所以这时处理截图时不能再减去状态栏那部分了,因为此时截图上面根本没有状态栏
3.webview截图
在4.3系统上面,使用getDecorView().getDrawingCache()方法有时不能准确的截取webview上面显示的内容。当webview里显示tab形式的页面时,有时不管当前处于哪个tab,截图出来的都是第一个tab的内容。
但是,如果使用webview.getDrawingCache(),那么是能得到正确的图片的,所以我在含有webview的页面中截图方式是遍历页面中的view,然后将图片拼到一起
     

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程