如何以编程方式在 Android 上截取屏幕截图?
曾经想对特定视图进行完美的截图,或者某些 UI 元素破坏了你最喜欢的截图?别担心,这篇 Geeks for Geeks 文章将帮助您通过从头开始制作应用程序来实现它。由于下面是本文标题名称的代码,我们将讨论如何在 Android 上以编程方式截取屏幕截图。
分步实施
第 1 步:创建一个新项目
要在 Android Studio 中创建新项目,请参阅如何在 Android Studio 中创建/启动新项目。请注意,选择Kotlin作为编程语言。
第 2 步:设计布局文件
我们将从开始设计您想要捕获的布局开始,在这里我们将只添加一个基本的文本视图,然后截取屏幕截图。导航到app > res > layout > activity_main.xml并将以下代码添加到该文件中。下面是activity_main.xml文件的代码。
XML
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
}
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
}
}
第 3 步:使代码生效
我们现在将添加作为主题主要症结的代码,这将实际截取屏幕截图,然后将其存储在您的设备上。
科特林
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
}
视图是指我们希望捕获快照的布局视图。我们的代码中有一个以 id 为容器的视图。
第 4 步:做更好的事情
我们还可以将以下方法添加到文件中,以便我们可以实现一些附加功能,然后再次截取屏幕截图以便更好。在这种情况下,视图将是 ConstraintLayout(即容器)的 id。在此方法中,我们将首先构造一个空位图,我们必须将其作为函数值返回。然后我们构建一个 Canvas 并使用位图在其上绘制。它采用 bgDrawable 中的视图背景。现在,我们将使用 view.draw 在画布(canvas)上绘制视图。最后,我们返回我们创建的位图,也就是视图的位图。现在,在 Activity 文件中,调用上述方法如下:
科特林
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
}
}
输出:
现在,这是我们在第 1 步中创建的视图,这非常适合我们需要从大量信息中总结或隔离一些特殊信息并隔离信息的情况。
结论
此方法可用于为您想要的任何视图生成位图,以及任何小部件的屏幕截图,例如 ImageView 或 TextView。