簡體   English   中英

在 canvas 上繪制片段視圖

[英]Draw a fragments view on a canvas

我正在嘗試將片段的視圖繪制到 canvas 上以將其導出為圖像。 我嘗試按照以下問題進行操作: Android: Draw a view on canvas並設法在 canvas 上繪制了一個膨脹視圖,但是當我嘗試將其繪制到布局上時,它會將視圖碎片化。

這是我的片段主機:

<FrameLayout
        android:layout_width="1000px"
        android:layout_height="1000px"
        android:visibility="invisible"
        tools:ignore="PxUsage"
        android:id="@+id/fragment_host"/>

這就是我在 canvas 上繪圖的方式

supportFragmentManager.beginTransaction()
        .replace(R.id.fragment_host, MyTrackViewerFragment().apply {
            onCreateControls = {

                bitmap = Bitmap.createBitmap(1000, 1000, Bitmap.Config.ARGB_8888)
                val canvas = Canvas(bitmap)

                it.apply {
                    layoutParams = LinearLayout.LayoutParams(1000, 1000)
                    measure(measuredWidth, measuredHeight)
                    layout(0, 0, 1000, 1000)
                    draw(canvas)
                }

                findViewById<ImageView>(R.id.preview).setImageBitmap(bitmap)
                ImageView.ScaleType.CENTER_CROP
                supportFragmentManager.beginTransaction().remove(this).commit()
            }
        })
        .commit()

這是結果(黑色方塊是預覽圖像視圖):

在調用 measure 和 layout 方法之后,fragment host 中的 fragment 也可以正確繪制。

不同的片段給出了類似的結果(正方形是預覽圖像視圖):

我錯過了什么?

編輯:似乎layout(0, 0, 1000, 1000)弄亂了布局,但我找不到原因

發現問題與RelativeLayoutmatch_parentwrap_content的使用有關。 看起來它沒有正確布局,因此視圖在片段中看起來有點正確,但在手動測量時卻不正確。

通過將 RelativeLayout 包裝在 LinearLayout 中並為未對齊的元素提供固定大小(px 或 dp),它終於奏效了!

也許這些觀點是硬件加速的。 嘗試改用PixelCopy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM