DEVLOG 9.10 使用Camera實(shí)現(xiàn)可以隨著手勢轉(zhuǎn)動的View
開發(fā)過程中的隨筆---
代碼倉庫連接:
https://github.com/kolibreath/Practices/blob/master/RotateTextView.kt
實(shí)現(xiàn)了一個(gè)隨著手勢進(jìn)行轉(zhuǎn)動的View

困難點(diǎn)和遇到的問題:
Q1. 如何圍繞中心進(jìn)行旋轉(zhuǎn)
A1. 使用Camera類實(shí)現(xiàn)。Camera類使用的時(shí)候需要格外注意
這個(gè)類的坐標(biāo)系和View和手機(jī)坐標(biāo)系不同,具體可以看看扔物線的視頻https://www.bilibili.com/video/BV1Xx411H7HE?zw。Camera在Z軸上確定了一個(gè)虛擬相機(jī),在旋轉(zhuǎn)的時(shí)候會根據(jù)物體投影到XoY平面上的內(nèi)容進(jìn)行繪制。
Camera和Canvas的操作順序都是【從下往上】的,這主要是方便理解

canvas先移動-mCenterX和-mCenterY到原點(diǎn),然后再移動正值還原。并且之后都要進(jìn)行restore
3. 其實(shí)Matrix在使用的時(shí)候也需要進(jìn)行reset。Canvas可以獲取到自身的Matrix對象,如果沒有設(shè)置就是一個(gè)單位矩陣。
下一步結(jié)合ViewDragHelper實(shí)現(xiàn)ViewGroup對于View的控制。因?yàn)樵谑录职l(fā)的過程中,會檢測當(dāng)前的MotionEvent的x y 是否觸碰到對應(yīng)的View。但是小米天氣的主頁面在觸摸大的ViewGroup時(shí)就回翻轉(zhuǎn)字體+平移下面的View。這里使用ViewGroup攔截不好實(shí)現(xiàn)。