以更快的速度截取视图的方法

时间:2015-11-03 06:25:38

标签: android

在我的应用程序中,我通过截屏,灰度显示以及在其上添加错误文本来显示所有错误。这是我截取屏幕截图的方式:

private Bitmap getBitmapFromView(View v) {
    Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    v.draw(canvas);
    return bitmap;
}

final ViewGroup root = (ViewGroup) getWindow().getDecorView();
Bitmap bitmap = getBitmapFromView(root);

然后将位图转换为灰度,添加文本并显示。 我的问题是某些设备getBitmapFromViewGalaxy S5意外的btw)需要500-700毫秒才能完成。我的问题是,是否有更快的方式来截取视图或整个屏幕的屏幕截图?我试过View.getDrawingCache(),但速度相同。如果我是对的,那么它的工作方式与我的getBitmapFromView方法相同。

修改

好的,我弄清楚在我的情况下使用Android Monitor和方法分析导致性能如此缓慢的原因。 GradientDrawable占据了80%的时间。我对它进行了优化,现在大约需要150毫秒。截屏。但问题仍然存在:有没有更快的方法呢?也许使用NDK?

1 个答案:

答案 0 :(得分:0)

您的客户观点

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    this.buildDrawingCache();
}

获取CacheBitmap

view.getDrawingCache();

这对我有用,我可以立即获得CacheBitmap

但这可能会导致一些性能问题,这是一个糟糕的理想