当前位置:   article > 正文

Android Compose使用AndroidView,并将 AndroidView 保存成图片。

Android Compose使用AndroidView,并将 AndroidView 保存成图片。

谢谢关注!!

前言:上一篇文章主要介绍HarmonyOs开发之———容器组件使用 http://t.csdnimg.cn/r9Qd1

一、使用 AndroidView

  1. //images 是一个 uri数组
  2. var androidView by remember { mutableStateOf<View?>(null) }
  3. AndroidView(factory = {
  4. FrameLayout(it)
  5. .apply {
  6. layoutParams = ViewGroup.LayoutParams(
  7. ViewGroup.LayoutParams.WRAP_CONTENT,
  8. ViewGroup.LayoutParams.WRAP_CONTENT
  9. )
  10. val composeVIew = ComposeView(context)
  11. post {
  12. composeVIew.setContent {
  13. LazyColumn(
  14. modifier = Modifier
  15. .padding(top = 10.dp, bottom = 10.dp)
  16. .width(179.dp)
  17. .height(parentHeight.dp),
  18. horizontalAlignment = Alignment.CenterHorizontally,
  19. verticalArrangement = Arrangement.Center
  20. ) {
  21. items(images) { image ->
  22. val painter: Painter =
  23. rememberAsyncImagePainter(image)
  24. Box(
  25. modifier = Modifier
  26. .padding(top = 5.dp, bottom = 5.dp)
  27. .size(147.dp, 147.dp)
  28. .clip(
  29. RoundedCornerShape(10.dp)
  30. )
  31. .background(color = Color.Transparent)
  32. ) {
  33. if (selectFilter != null) {
  34. loadBitmapFromUri(context,image)?.let { it1 ->
  35. Image(
  36. bitmap = it1.asImageBitmap() ,
  37. contentDescription = null,
  38. modifier = Modifier.fillMaxSize(),
  39. contentScale = ContentScale.Crop,
  40. colorFilter = ColorFilter.colorMatrix(
  41. ColorMatrix(selectFilter!!)
  42. )
  43. )
  44. }
  45. } else {
  46. loadBitmapFromUri(context,image)?.let { it1 ->
  47. Image(
  48. bitmap = it1.asImageBitmap(),
  49. contentDescription = null,
  50. modifier = Modifier.fillMaxSize(),
  51. contentScale = ContentScale.Crop
  52. )
  53. }
  54. }
  55. }
  56. }
  57. }
  58. }
  59. }
  60. this.addView(composeVIew, layoutParams)
  61. androidView = this
  62. }
  63. })

二、将 AndroidView保存成 bitmap:val bitmap = androidView?.let { saveAndroidViewToBitmapTwo(it) }

  1. fun saveAndroidViewToBitmapTwo(view: View): Bitmap {
  2. view.measure(
  3. View.MeasureSpec.makeMeasureSpec(view.width, View.MeasureSpec.EXACTLY),
  4. View.MeasureSpec.makeMeasureSpec(view.height, View.MeasureSpec.EXACTLY)
  5. )
  6. view.layout(0, 0, view.measuredWidth, view.measuredHeight)
  7. val bitmap =
  8. Bitmap.createBitmap(view.measuredWidth, view.measuredHeight, Bitmap.Config.ARGB_8888)
  9. val canvas = android.graphics.Canvas(bitmap)
  10. view.draw(canvas)
  11. return bitmap
  12. }

注意:当 AndroidView 中使用 Image组件是请注意,显示图片要使用 bitmap、或者资源文件,如果使用val painter: Painter = rememberAsyncImagePainter(image)  //image是 Uri类型,会报错:java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps

如需了解更多请联系博主,本篇完。

下一篇:HarmonyOs开发之———Video组件的使用、使用HTTP访问网络
HarmonyOs开发,学习专栏敬请试读订阅:http://t.csdnimg.cn/Btyoj
谢谢阅读,烦请关注:

后续将持续更新!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/445123
推荐阅读
相关标签
  

闽ICP备14008679号