簡體   English   中英

如何在 MotionLayout 中為 wrap_content TextView 設置動畫?

[英]How to animate a wrap_content TextView in MotionLayout?

首先,我創建了一個最小的演示來演示這個問題。

我想做的事

我的屏幕頂部有 2 個TextView 第二個在第一個的右邊,尺寸較小。 兩者都顯示 API 返回的一些內容(所以我不知道需要多長時間 - 即它們必須是wrap_content 。)

現在我想實現一個帶有過渡效果的粘性標題:當用戶向上滾動時,第一個TextView將縮小到與第二個幾乎相同的大小,並保持在屏幕頂部。 為了實現這一點, MotionLayout似乎是一個完美的選擇。

我的方法

由於我不知道內容的長度,所以為了動畫第一個TextView的大小,我只能選擇以下之一:

  1. 動畫文本大小
  2. 動畫比例

方法 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.

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