我正在使用折疊工具列,并且正在更改視圖寬度 OnOffsetChangedListener。我想要的是在 searchView 寬度改變時放一點影片,現在它的變化非常直接,對用戶來說有點奇怪。我試圖android:animateLayoutChanges="true" 在父布局上進行設定 ,但沒有奏效
var mListener =
OnOffsetChangedListener { appBarLayout, verticalOffset ->
if (binding.collapsingToolbar.getHeight() verticalOffset < 2 * ViewCompat.getMinimumHeight(
binding.collapsingToolbar
)
) {
val view: View = binding.searchView
val layoutParams: CollapsingToolbarLayout.LayoutParams = view.layoutParams as CollapsingToolbarLayout.LayoutParams
layoutParams.width = binding.appBar.width / 2
view.layoutParams = layoutParams
} else {
val view: View = binding.searchView
val layoutParams: CollapsingToolbarLayout.LayoutParams = view.layoutParams as CollapsingToolbarLayout.LayoutParams
layoutParams.width = CollapsingToolbarLayout.LayoutParams.MATCH_PARENT
view.layoutParams = layoutParams
}
}
binding.appBar.addOnOffsetChangedListener(mListener)
uj5u.com熱心網友回復:
您如何嘗試內置插值器?
請查看以下鏈接以獲取一些見解:https : //jebware.com/interp/android-animation-interpolators.html
一個非常基本的例子如下:
val fastOutSlowInInterpolator = FastOutSlowInInterpolator()
val interpolatedValue = fastOutSlowInInterpolator.getInterpolation(0.5f)
在上面的例子中,0.5f 會在 0 到 1 之間變化,它會回傳你應該在視圖影片中使用的影片值。
uj5u.com熱心網友回復:
您可以簡單地定義一個影片類。
class ResizeWidthAnimation(private val mView: View, private val mWidth: Int) : Animation() {
private val mStartWidth: Int = mView.width
override fun applyTransformation(interpolatedTime: Float, t: Transformation{
mView.layoutParams.width = mStartWidth ((mWidth - mStartWidth) * interpolatedTime).toInt()
mView.requestLayout()
}
override fun willChangeBounds(): Boolean {
return true
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/392506.html
