package
org.geeksforgeeks.subviewscreenshot
import
android.content.ContentValues
import
android.graphics.Bitmap
import
android.net.Uri
import
android.os.Build
import
androidx.appcompat.app.AppCompatActivity
import
android.os.Bundle
import
android.os.Environment
import
android.provider.MediaStore
import
android.widget.Button
import
android.widget.TextView
import
android.widget.Toast
import
java.io.File
import
java.io.FileOutputStream
import
java.io.OutputStream
class
MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super
.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val mTextView = findViewById<TextView>(R.id.text_view_1)
val mButton = findViewById<Button>(R.id.button_1)
mButton.setOnClickListener {
mTextView.isDrawingCacheEnabled =
true
mTextView.buildDrawingCache(
true
)
val b = Bitmap.createBitmap(mTextView.drawingCache)
mTextView.isDrawingCacheEnabled =
false
saveMediaToStorage(b)
}
}
private
fun saveMediaToStorage(bitmap: Bitmap) {
val filename =
"${System.currentTimeMillis()}.jpg"
var fos: OutputStream? =
null
if
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
this
.contentResolver?.also { resolver ->
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, filename)
put(MediaStore.MediaColumns.MIME_TYPE,
"image/jpg"
)
put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_PICTURES)
}
val imageUri: Uri? = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)
fos = imageUri?.let { resolver.openOutputStream(it) }
}
}
else
{
val imagesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val image = File(imagesDir, filename)
fos = FileOutputStream(image)
}
fos?.use {
bitmap.compress(Bitmap.CompressFormat.JPEG,
100
, it)
Toast.makeText(
this
,
"Captured View and saved to Gallery"
, Toast.LENGTH_SHORT).show()
}
}
}