[英]How to animate a wrap_content TextView in MotionLayout?
首先,我創建了一個最小的演示來演示這個問題。
我的屏幕頂部有 2 個TextView
。 第二個在第一個的右邊,尺寸較小。 兩者都顯示 API 返回的一些內容(所以我不知道需要多長時間 - 即它們必須是wrap_content
。)
現在我想實現一個帶有過渡效果的粘性標題:當用戶向上滾動時,第一個TextView
將縮小到與第二個幾乎相同的大小,並保持在屏幕頂部。 為了實現這一點, MotionLayout
似乎是一個完美的選擇。
由於我不知道內容的長度,所以為了動畫第一個TextView
的大小,我只能選擇以下之一:
方法 1 可以通過此解決方案完成。 但是,動畫根本不流暢,因此無法使用。
所以我嘗試了方法layoutDescription
文件從第一個TextView
傳輸
<Constraint
android:id="@+id/tvFirst"
android:layout_width="wrap_content"
android:layout_height="32dp"
app:layout_constraintTop_toBottomOf="@id/vTop"
app:layout_constraintStart_toStartOf="parent"/>
到
<Constraint
android:id="@+id/tvFirst"
android:layout_width="wrap_content"
android:layout_height="24dp"
app:layout_constraintTop_toBottomOf="@id/vTop"
app:layout_constraintStart_toStartOf="parent"
android:transformPivotX="0dp"
android:transformPivotY="0dp"
android:scaleX="0.6"
android:scaleY="0.6"/>
動畫效果很棒,但是
TextView
的寬度不會改變。 只有它的內容縮小了。 這里的問題是,我想讓第二個TextView
粘在內容的末尾,但現在它們之間有很大的差距。
我試圖結合兩種方法。 即我創建了一個透明TextView
作為第一的虛設TextView
,其使用動畫方法1(TEXTSIZE),並讓第二TextView
約束到啞代替。 但是,寬度變化只有在完成過渡后才會發生,第二個TextView
在過渡過程中仍然停留在同一位置。
如何在第二個TextView
粘貼到第一個TextView
內容的末尾時平滑地設置動畫?
這是一個沒有好的解決方案的已知問題。 默認情況下,MotionLayout 塊在動畫過程中進行中繼。 這可以通過標志 Transition 來改變:
<Transition motion:layoutDuringTransition="honorRequest" \>
這意味着每次通過都會解決布局(這很慢),但可能適合您的需求。 另一種方法是使用旨在進行平滑縮放的 MotionLabel。
旨在通過屬性 scaleFromTextSize 減輕縮放量化
<androidx.constraintlayout.utils.widget.MotionLabel
app:textPanX="0"
app:scaleFromTextSize="40sp"
android:textSize="90sp"/>
這會從大小中獲取文本的“輪廓”並將它們縮放到所需的大小。
從長遠來看,我們正在為這個問題尋找更好的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.