android 图片剪切 第三方,android 第三方app截图

将View生成相应的图片是很容易的,所以app内截图可以采用此种方式。

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条,我们只需要得知其高度即可,然后去除这几部分(这里没有考虑横屏)

//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系统

/**

* 判断是否是魅族系统

* @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高度

//获取魅族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,然后将图片拼到一起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值