【发布时间】:2021-09-06 04:08:13
【问题描述】:
我阅读了很多关于如何将视图转换为位图的文章,其中大多数建议使用画布绘制方法,但在我的尝试中,它只返回一个透明位图,我确信视图是正确的,因为我尝试了显示通过将其添加到视图中。我也确定视图与适当的宽度和高度相关联,以下代码是转换。这个问题困扰了我一个星期。请帮帮我。
val widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(layoutWidthDp,View.MeasureSpec.EXACTLY)
val heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(layoutHeightDp, View.MeasureSpec.EXACTLY)
tableLayout.measure(widthMeasureSpec,heightMeasureSpec)
tableLayout.layout(0, 0, tableLayout.getMeasuredWidth(), tableLayout.getMeasuredHeight());
var bitmap = Bitmap.createBitmap(tableLayout.width, tableLayout.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
tableLayout.draw(canvas)
previewBitmap = bitmap
previewIV = findViewById(R.id.finalLayoutPreviewIV)
previewIV?.setImageBitmap(previewBitmap)
我的目标视图是一个不显示的视图。我不是不是相对的问题,我把创建过程放在下面。
val tableLayout = TableLayout(this)
tableLayout.setLayoutParams( TableLayout.LayoutParams(layoutWidthDp,layoutHeightDp))
tableLayout.removeAllViews()
Log.d("", tableLayout.layoutParams.toString())
val padding = convertMMToDp(5F,resources).toInt()
val widthDp = convertMMToDp(photoSizeWidth.toFloat(),resources).toInt()
val heightDp = convertMMToDp(photoSizeHeight.toFloat(),resources).toInt()
val colAmount = layoutWidthDp/ (widthDp+padding*2)
val rowAmount = layoutHeightDp/ (heightDp+padding*2)
for (i in 1..rowAmount){
val tableRow = TableRow(this)
tableRow.setLayoutParams(
TableRow.LayoutParams(
TableRow.LayoutParams.FILL_PARENT,
TableRow.LayoutParams.WRAP_CONTENT
)
)
for (j in 1..colAmount){
val layout = RelativeLayout(applicationContext)
val photoItemVI = ImageView(applicationContext)
if (photoPrototype.type?.background == "#FFFFFF") {
layout.setBackgroundColor(getColor(R.color.color_light_white))
}
layout.addView(photoItemVI)
photoItemVI.post(Runnable {
val params = RelativeLayout.LayoutParams(
widthDp, heightDp
)
params.setMargins(padding)
photoItemVI.setLayoutParams(params)
photoItemVI.setBackgroundColor(Color.parseColor(photoPrototype.type?.background))
photoItemVI.setImageURI(photoPrototype.photo_without_background)
photoItemVI.scaleType = ImageView.ScaleType.CENTER_CROP
photoItemVI.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT)
layout.updateViewLayout(photoItemVI, params);
})
tableRow.addView(layout)
}
tableLayout.addView(tableRow)
}
【问题讨论】:
标签: android kotlin android-canvas android-bitmap