![多view旋轉效果圖](https://i.iter01.com/images/776ebc027e2eb8a2b35f73f5e9ce8b0556b03915016f390bb6d785b923303613.gif)
![多View統一Camera v1.2](https://i.iter01.com/images/2198e53e0f723885f8d5e3639faa41b8bc8064c343d3eebb30a1e0061197713f.jpg)
我們想旋轉嘛,讓每個View都在ValueAnimator裡改變setRotationY不就行了。
final ValueAnimator animator = ValueAnimator.ofInt(0, 180);
animator.setDuration(2000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
int animatedValue = (int) valueAnimator.getAnimatedValue();
for (View view : listViews) {
view.setRotationY(animatedValue);
}
}
});
複製程式碼
幾行程式碼迅速搞定
![多View統一Camera v1.2](https://i.iter01.com/images/702d17b44fe78fcded90ff57e2d00df7ddb02ec7633785e89fc121be0ccfb071.gif)
![多View統一Camera v1.2](https://i.iter01.com/images/44ab98616220dc3700ac9da368f2b425dee6a66ade2dd0cf4e4a7684dda0537a.jpg)
有沒有辦法統一呢?有。那就是設定一個統一的camera位置,讓所有View的camera都移動到該位置上,則就相當於一個camera投影不同的View。這個時候旋轉View就可以達到整體的效果。
通過setPivotY和setPivotX可以調整camera所在位置。那麼這個PivotY和PivotX參考的座標系到底是在哪?PivotY和PivotX的參考座標系是View的左上角。
現在思路很清晰了。就是設定一個camera的Y位置,然後通過setPivotY()讓所有view的camera都移動到該位置。
具體做法:
- 以第一個view左上角為參考座標系,得到camera的Y位置。 cameraY=所有view的height和/2
- Y值對映到各自的座標系上。
PivotY=cameraY-上個view的height
if (isFirst) {
isFirst = false;
//計算總高度
float allHeight = 0;
for (View item : listViews) {
allHeight += item.getHeight();
}
//得到camera的Y值
float cameraY = allHeight / 2;
//將camera的Y值對映到每個View上,並移動到該位置
for (int i = 0; i < listViews.size(); i++) {
View itemView = listViews.get(i);
cameraY = cameraY - (i < 1 ? 0 : listViews.get(i - 1).getHeight());
itemView.setPivotY(cameraY);
}
}
animator.start();
複製程式碼