作者:捕鱼达人2602914975 | 来源:互联网 | 2022-12-03 10:17
在android API 28中view.getDrawingCache()
已被弃用.有没有更新的解决方案来生成Android中的特定视图的位图.
1> Ashvin solan..:
使用画布
像素Api
Canvas Example
RelativeLayout view = (RelativeLayout)findViewById(R.id.relativelayout);
Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null) {
bgDrawable.draw(canvas);
} else {
canvas.drawColor(Color.WHITE);
}
view.draw(canvas);
PixelCopy Api
/sf/ask/17360801/
更多
https://developer.android.com/reference/android/graphics/Bitmap
https://developer.android.com/reference/android/graphics/Canvas
2> Mostafa Mono..:
我找到了一种使用PixelCopy API将视图作为位图检索的方法。二手的科特林
fun getBitmapFromView(view: View, activity: Activity, callback: (Bitmap) -> Unit) {
activity.window?.let { window ->
val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
val locatiOnOfViewInWindow= IntArray(2)
view.getLocationInWindow(locationOfViewInWindow)
try {
PixelCopy.request(window, Rect(locationOfViewInWindow[0], locationOfViewInWindow[1], locationOfViewInWindow[0] + view.width, locationOfViewInWindow[1] + view.height), bitmap, { copyResult ->
if (copyResult == PixelCopy.SUCCESS) {
callback(bitmap)
}
// possible to handle other result codes ...
}, Handler())
} catch (e: IllegalArgumentException) {
// PixelCopy may throw IllegalArgumentException, make sure to handle it
e.printStackTrace()
}
}
}
为什么Google总是必须使事情复杂化?我想要位图的时间与我以后不再使用回调调用该方法的时间相同。
这是谷歌一直在做。:)
@ TheRealChx101我今天发现了[this](/sf/ask/17360801/),我将使用它。