在我的应用程序中,我通过截屏,灰度显示以及在其上添加错误文本来显示所有错误。这是我截取屏幕截图的方式:
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);
然后将位图转换为灰度,添加文本并显示。
我的问题是某些设备getBitmapFromView
(Galaxy S5
意外的btw)需要500-700毫秒才能完成。我的问题是,是否有更快的方式来截取视图或整个屏幕的屏幕截图?我试过View.getDrawingCache()
,但速度相同。如果我是对的,那么它的工作方式与我的getBitmapFromView
方法相同。
修改
好的,我弄清楚在我的情况下使用Android Monitor和方法分析导致性能如此缓慢的原因。 GradientDrawable
占据了80%的时间。我对它进行了优化,现在大约需要150毫秒。截屏。但问题仍然存在:有没有更快的方法呢?也许使用NDK?
答案 0 :(得分:0)
您的客户观点
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
this.buildDrawingCache();
}
获取CacheBitmap
view.getDrawingCache();
这对我有用,我可以立即获得CacheBitmap
但这可能会导致一些性能问题,这是一个糟糕的理想