如何以编程方式在 Android 上截屏?

Posted 小陈乱敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何以编程方式在 Android 上截屏?相关的知识,希望对你有一定的参考价值。

在本文中,我们将学习以编程方式截取任何视图特定视图或任何布局的屏幕截图。

但首先我们将创建一个我们想要截屏的布局

<?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=".MainActivity">

    <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>

在活动中,我们将创建一个名为

getScreenShot(/** your view **/)

这里,view 是我们要截屏的布局视图。在我们的代码中,我们有以 id 作为容器的视图。
我们的getScreenShot方法将生成一个位图,我们可以对其执行操作

private fun getScreenShot(view: View): Bitmap 
    val returnedBitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
    val canvas = Canvas(returnedBitmap)
    val bgDrawable = view.background
    if (bgDrawable != null) bgDrawable.draw(canvas)
    else canvas.drawColor(Color.WHITE)
    view.draw(canvas)
    return returnedBitmap

在这里,我们将取 ConstraintLayout 的 id(即容器)。在此方法中,我们将首先创建一个空位图,我们必须将其作为函数的值返回。然后我们构造一个 Canvas 将位图绘制到上面。在 bgDrawable 中,它采用视图的背景。现在,我们将使用 view.draw(canvas) 在画布上绘制视图。最后,我们返回我们创建的位图,因为它将返回视图的位图。

现在,在 Activtiy 文件中调用上述函数,如下所示,

class MainActivity : AppCompatActivity() 

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val constraintLayout: ConstraintLayout = findViewById(R.id.container)
        getScreenShot(constraintLayout)
    

    private fun getScreenShot(view: View): Bitmap 
        val returnedBitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(returnedBitmap)
        val bgDrawable = view.background
        if (bgDrawable != null) bgDrawable.draw(canvas)
        else canvas.drawColor(Color.WHITE)
        view.draw(canvas)
        return returnedBitmap
    

它将生成输出,

现在,为了生成带有工具栏的完整 Activity 的位图,我们调用函数 getScreenShot() 像,

val activityView = window.decorView.rootView
getScreenShot(activityView)

上面的代码将生成以下输出,

现在,您可以使用生成的位图执行多个操作。您可以将其保存到设备的本地存储中,也可以执行编辑等操作。

这对于为您想要的任何视图生成位图很有用,您还可以生成任何特定小部件(如 ImageView 或 TextView)的屏幕截图。

以上是关于如何以编程方式在 Android 上截屏?的主要内容,如果未能解决你的问题,请参考以下文章

如何在运行 Debian Squeeze 和 LXDE 的 Raspberry Pi 上截屏? [关闭]

如何获取开发板上截屏图片?

如何获取开发板上截屏图片?

当相机在Android中的表面视图上以编程方式截屏

Android以编程方式截屏

如何以编程方式截屏(Swift、SpriteKit)