Попробуйте приведенное ниже решение
Java
yourView.post(new Runnable() {
@Override
public void run() {
//take screenshot
Bitmap myBitmap = captureScreen(binding.llMain);
Log.e(TAG, "run :: Screenshot captured..!");
try {
if (myBitmap != null) {
//your save image code
Log.e(TAG, "run :: Screenshot saved..!");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
private Bitmap captureScreen(View v) {
Bitmap screenshot = null;
try {
if (v != null) {
screenshot = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(screenshot);
v.draw(canvas);
}
} catch (Exception e) {
Log.e(TAG, "Failed to capture screenshot because:" + e.getMessage());
}
return screenshot;
}
Kotlin
binding.idLayout.post(Runnable {
val myBitmap = getScreenShotFromView(binding.idLayout)
try {
if (myBitmap != null) {
storeScreenShot(myBitmap, "test2.jpg", this@TelecollecteActivity)
}
} catch (e: java.lang.Exception) {
Log.e("BLABLA", "Error ::" + e.message)
}
})
fun getScreenShotFromView(v: View): Bitmap? {
var screenshot: Bitmap? = null
try {
if (v != null) {
screenshot = Bitmap.createBitmap(v.measuredWidth, v.measuredHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(screenshot)
v.draw(canvas)
}
} catch (e: Exception) {
Log.e("BLABLA", "Failed to capture screenshot because:" + e.message)
}
return screenshot
}
Для справки
Я также добавил полный код, который я тестировал, и он отлично работает для меня.
activity_main_two. xml
Если вы используете черный цвет Итак, вам нужно добавить цвет фона как белый другие тиски полного изображения отображаются как черные.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/llMain"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/White"
android:gravity="center"
android:orientation="vertical"
tools:context=".Main2Activity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hardik Talaviya" />
</LinearLayout>
Main2Activity
class Main2Activity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_two)
llMain.post(Runnable {
val myBitmap = getScreenShotFromView(llMain)
try {
if (myBitmap != null) {
//storeScreenShot(myBitmap, "test2.jpg", this@TelecollecteActivity)
val extr = Environment.getExternalStorageDirectory().toString()
val myPath = File(extr, "test.jpg")
var fos: FileOutputStream? = null
try {
fos = FileOutputStream(myPath)
myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos)
fos!!.flush()
fos!!.close()
MediaStore.Images.Media.insertImage(contentResolver, myBitmap,
"Screen", "screen")
} catch (e: FileNotFoundException) {
// TODO Auto-generated catch block
e.printStackTrace()
} catch (e: Exception) {
// TODO Auto-generated catch block
e.printStackTrace()
}
}
} catch (e: java.lang.Exception) {
Log.e("BLABLA", "Error ::" + e.message)
}
})
}
fun getScreenShotFromView(v: View): Bitmap? {
var screenshot: Bitmap? = null
try {
if (v != null) {
screenshot = Bitmap.createBitmap(v.measuredWidth, v.measuredHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(screenshot)
v.draw(canvas)
}
} catch (e: Exception) {
Log.e("BLABLA", "Failed to capture screenshot because:" + e.message)
}
return screenshot
}
}
Сохраненное изображение снимка экрана
Ссылка на изображение
Надеюсь, это поможет вам !