textview - 翻轉動畫
一直以來我都想好把 textview 好好整整,這不現在得著機會了,還不走起,等著幹啥......
先看效果:
專案地址:BW_Libs
實現思路
所謂翻轉,就是 A 面 B 面的切換,和磁帶正反面很像的。看圖很容易就讓我們想起用 rotationY 這個屬性來做動畫,在動畫執行一半之後,切換 view 的顯示。 所以我試了試,我用屬性動畫做的:
先用的 0-180 的動畫,發現有些問題。在翻轉 90 之後,view 的內容也跟著翻轉了,文字都是反的著明顯不行
然後我拆成 2個動畫,0-90,90-180,都不行,view 內容還是反著的,我想想,屬性都改了,顯示肯定也跟著走啊,只要過 90度 都行不啊
然後我看到著篇文章:Android自定義控制元件之翻轉按鈕,發現原來是從 0-90,-90-0。我 CAO 了,原來是負數的啊,思維定勢害死人啊,百思不得其姐的事原來這麼簡單,看來從小學的政治最常說的:解放思想,真是至理名言啊,主席誠不欺我也~
動畫程式碼
我把動畫部分抽象了一下,做成了一個輔助工具類,因為不光 textview 可以用,只要是 view 都可以用,著應該屬於 layout 動畫的範疇了吧
ps:我用 button 試了下,發現有蛋疼的陰影擴散問題,可難看了,所以這裡用 textview 代替 button
動畫輔助類:
class LayoutRotationAnimator(view: View, time: Long = 300) {
/**
* 畫面切換時顯示監聽器
*/
interface IStateChangeListener {
fun showA()
fun showB()
}
// A面 = 正面
var STATE_A: Int = 1
// B面 = 反面
var STATE_B: Int = -1
// 當前在哪面
var currentState: Int = STATE_A
// A 面動畫
var animatorA: ObjectAnimator
// B 面動畫
var animatorB: ObjectAnimator
// 面切換時顯示變化
lateinit var stateChangeListener: IStateChangeListener
init {
animatorA = ObjectAnimator.ofFloat(view, "rotationY", 0f, 90f).setDuration(time)
animatorB = ObjectAnimator.ofFloat(view, "rotationY", -90f, 0f).setDuration(time)
animatorA.addListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
}
override fun onAnimationEnd(animation: Animator?) {
view.rotationY = 0f
changeState()
animatorB.start()
}
override fun onAnimationCancel(animation: Animator?) {
}
override fun onAnimationStart(animation: Animator?) {
}
})
}
fun start() {
animatorA.start()
}
/**
* 畫面更新時切換顯示
*/
private fun changeState() {
if (currentState == STATE_A) {
currentState = STATE_B
stateChangeListener?.showB()
} else {
currentState = STATE_A
stateChangeListener?.showA()
}
}
}
佈局使用:
class TextViewActivity : AppCompatActivity() {
lateinit var layoutAnimator: LayoutRotationAnimator
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_text_view)
layoutAnimator = LayoutRotationAnimator(btn01)
layoutAnimator.stateChangeListener = object : LayoutRotationAnimator.IStateChangeListener {
override fun showA() {
btn01.setText("正面")
btn01.setBackgroundColor(Color.BLUE)
}
override fun showB() {
btn01.setText("反面")
btn01.setBackgroundColor(Color.RED)
}
}
btn01.setOnClickListener({
layoutAnimator.start()
})
}
}
參考資料:
相關文章
- [譯] 使用 Flutter 製作 3D 翻轉動畫Flutter3D動畫
- 教你批次翻轉大量影片畫面的方法
- TextView 自動換行,每行排滿的自定義TextViewTextView
- CSS基礎篇–CSS3圖片翻轉動畫技術詳解CSSS3動畫
- Android 轉場動畫Android動畫
- “動畫公司”疊紙 竟在動畫上翻車?《戀與製作人》動畫化學問有多少?動畫
- ul>li*3 實現翻書動畫效果動畫
- SVG矩形旋轉動畫SVG動畫
- 卡片旋轉動畫效果動畫
- 在 CSS 動畫中使用硬體加速(翻譯)CSS動畫
- [翻譯] Flutter 中的動畫 - 簡易指南 - 教程Flutter動畫
- Flutter:手把手教你實現一個仿 Flipboard 圖片3D翻轉動畫Flutter3D動畫
- Android轉場動畫一說Android動畫
- TransitionAnimation自定義轉場動畫NaN動畫
- 頁面旋轉動畫效果動畫
- 鴻蒙HarmonyOS實戰-ArkUI動畫(頁面轉場動畫)鴻蒙UI動畫
- 鴻蒙HarmonyO實戰-ArkUI動畫(元件內轉場動畫)鴻蒙UI動畫元件
- 【風農翻譯】開始畫畫素畫 #4
- 【風農翻譯】開始畫畫素畫 #3
- 【風農翻譯】開始畫畫素畫 #2
- 【風農翻譯】開始畫畫素畫 #1
- 【風農翻譯】開始畫畫素畫 #7
- 【風農翻譯】開始畫畫素畫 #5
- 【風農翻譯】開始畫畫素畫 #6
- 【風農翻譯】開始畫畫素畫 #8
- Flutter實戰動畫番外篇-翻頁效果實現Flutter動畫
- AutoComlete TextViewTextView
- 一個有上下滾動效果的TextViewTextView
- Android 設定TextView滑動滾動條和滑動效果AndroidTextView
- 每週一個前端動畫之四:掘金頭像旋轉動畫前端動畫
- CSS3動畫(360度旋轉、旋轉放大、放大、移動)CSSS3動畫
- (轉)iOS長按textView複製貼上顯示中文iOSTextView
- 高逼格Android轉場動畫,輕鬆實現掘金使用者頭像轉場動畫Android動畫
- 翻轉整數
- Android Reveal圓形Activity轉場動畫Android動畫
- CSS動畫之旋轉魔方輪播CSS動畫
- CSS3 loadding旋轉等待動畫CSSS3動畫
- [譯] React Native 中使用轉場動畫!React Native動畫