¿Cómo tomar una captura de pantalla programáticamente en Android?

¿Alguna vez quiso tomar una captura de pantalla perfecta de una vista en particular, o tal vez algún elemento de la interfaz de usuario arruinó su captura de pantalla favorita? No te preocupes mucho, este artículo Geeks for Geeks te ayudará a lograrlo creando una aplicación desde cero. Como a continuación se muestra el código para el nombre del título en este artículo, vamos a discutir cómo tomar capturas de pantalla mediante programación en Android.

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Kotlin como lenguaje de programación.

Paso 2: diseñar el archivo de diseño

Comenzaremos por comenzar a diseñar el diseño que desea capturar, aquí agregaremos solo una vista de texto básica y luego tomaremos la captura de pantalla. Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo  activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/container"
        tools:context=".GeeksforGeeksActivity">
    
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="I am screenshot"
            android:id="@+id/textView"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>
    
</android.support.constraint.ConstraintLayout>

Paso 3: hacer que el código funcione

Ahora agregaremos el código que es el quid principal del tema, esto hará que realmente tome la captura de pantalla y luego la almacene en su dispositivo.

Kotlin

private fun takeScreenShot(view: View): Bitmap {
    val thescreenshot = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
    val draw = Canvas(thescreenshot)
    val drawGeeks = view.background
    if (drawGeeks != null) drawGeeks.draw(draw)
    else draw.drawColor(Color.BLACK)
    view.draw(draw)
    return thescreenshot
}

Vista se refiere a la vista de diseño de la que deseamos capturar una instantánea. Tenemos una vista con id como contenedor en nuestro código.

Paso 4: Hacer cosas aún mejores

También podemos agregar los métodos a continuación al archivo para que podamos lograr alguna funcionalidad adicional y luego tomar la captura de pantalla nuevamente para que sea mejor. En este caso, la vista será la identificación de ConstraintLayout (es decir, contenedor). En este método, primero construiremos un mapa de bits vacío, que debemos devolver como el valor de la función. Luego construimos un lienzo y usamos el mapa de bits para dibujar en él. Toma el telón de fondo de la vista en bgDrawable. Y ahora, usaremos view.draw para dibujar la vista en el lienzo (lienzo). Finalmente, devolvemos el mapa de bits que creamos, que es el mapa de bits de la vista. Ahora, en el archivo de actividad, llame al método mencionado anteriormente de la siguiente manera:

Kotlin

class GeeksforGeeksActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val geeksforgeekslLayout: ConstraintLayout = findViewById(R.id.gfgContainer)
        takeScreenShot(geeksforgeekslLayout)
    }
  
    private fun takeScreenShot(view: View): Bitmap {
        val screenshot= Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
        val drawBoard = Canvas(returnedBitmap)
        val actualScreen = view.background
        if (actualScreen != null) actualScreen.draw(drawBoard)
        else drawBoard.drawColor(Color.WHITE)
        view.draw(drawBoard)
        return returnedBitmap
    }
}

Producción:

Imagen #1. La salida.

Ahora, esta es la vista que creamos en el paso n.º 1, es perfecta para situaciones en las que necesitamos concluir o aislar alguna información especial del heno de información y también aislar la información.

Conclusión

Este método se puede usar para producir mapas de bits para cualquier vista que desee, así como capturas de pantalla de cualquier widget, como ImageView o TextView.

Publicación traducida automáticamente

Artículo escrito por icloudanshu y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *