Guardando una imagen de vistas fuera de pantalla en PixelCopy.
Tengo una pantalla con un ScrollView
. Luego, guardo la imagen de una vista cuando toco un botón en la parte inferior del scroll view. El problema que tengo es que no puedo guardar la parte superior del ScrollView
(que está fuera de la pantalla) como una imagen. Estoy usando PixelCopy
con el siguiente código:
fun takeScreenshot(view: View, activity: Activity){
val loc = IntArray(2)
view.getLocationInWindow(loc)
val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
PixelCopy.request(
activity.window,
Rect(loc[0], loc[1], loc[0] + view.width, loc[1] + view.height),
bitmap,
{if(it = PixelCopy.SUCCESS) //convertir a png y guardar},
Handler(looper.getMainLooper())
)
Quiero lograr la misma imagen que
val canvas = Canvas(bitmap)
view.draw(canvas)
puede lograr, donde puedo simplemente guardar una captura de pantalla de toda la vista incluso si la otra parte de la vista no es visible en la pantalla. ¿Hay alguna manera de lograr esto usando PixelCopy
?
davy.ai
Desafortunadamente,
PixelCopy
solo captura la parte visible de la vista que se muestra actualmente en la pantalla. No puede capturar las partes fuera de la pantalla de unScrollView
o cualquier otra vista.Si desea capturar toda la vista, incluyendo las partes fuera de la pantalla, puede utilizar el método que ha mencionado:
Para hacer esto, primero debe obtener la
View
que contiene todo el contenido delScrollView
. Por ejemplo, si elScrollView
contiene unLinearLayout
que contiene varias vistas, puede llamar afindViewById
en elViewGroup
padre delLinearLayout
para obtener el objetoView
que contiene todas las vistas secundarias del diseño.Una vez que tenga la
View
, puede crear un objetoBitmap
con las dimensiones deseadas y dibujar la vista en unCanvas
. Luego, puede guardar elBitmap
como un archivo PNG o en cualquier otro formato que desee.Aquí hay un ejemplo de cómo puede modificar su código para capturar toda la vista:
Tenga en cuenta que este enfoque puede no funcionar bien para vistas muy grandes, ya que puede resultar en problemas de rendimiento y memoria. En esos casos, puede necesitar utilizar una estrategia diferente, como la renderización de la vista en múltiples bitmaps más pequeños y unirlos.