課程
/移動開發
/Android
/ViewPager+Tab特效實現微信主界面
沒看懂什么意思,為啥旋轉中心在變化
2019-11-27
源自:ViewPager+Tab特效實現微信主界面 5-6
正在回答
public class RotateTransformer implements ViewPager.PageTransformer { ??? //最大旋轉角度 ??? public static final float MAX_ROTATE = 15; ??? //page:左右兩個圖片 ??? //position<0時,page表示左頁 ??? //position>0時,page表示右頁 ??? //position:左右兩頁的滑動比例 ??? //1)左頁滑出,右頁滑入: ??? //左頁的position: ( 0 -> -1 ) ??? //右頁的position:( 1 -> 0 ) ??? //2)右頁滑出,左頁滑入: ??? //左頁的position: ( -1 -> 0 ) ??? //右頁的position:( 0 -> 1 ) ??? @Override ??? public void transformPage(View page, float position) { ??????? //旋轉中心點:當前頁面的左上角頂點 ??????? //旋轉角度正值方向:順時針 ??????? //左頁移出屏幕時 ??????? if (position < -1) { // [-Infinity,-1) ??????????? //左頁逆時針旋轉 ??????????? //旋轉中心:左頁的右下角頂點 ??????????? //旋轉角度:逆時針旋轉到最大值 ??????????? page.setRotation(-MAX_ROTATE); ??????????? page.setPivotX(page.getWidth()); ??????????? page.setPivotY(page.getHeight()); ??????? } ??????? //左右頁面都在在屏幕內時 ??????? else if (position <= 1) { // [-1,1] ??????????? //左邊頁面逆時針旋轉 ??????????? //旋轉中心點:底邊中心點->右下角頂點 ??????????? //旋轉角度:逆時針旋轉 ??????????? if(position<0){ ??????????????? //動態調整旋轉中心點 ??????????????? float pivotX = 0.5f * page.getWidth() + 0.5f * page.getWidth() * Math.abs(position); ??????????????? float pivotY = page.getHeight(); ??????????????? page.setPivotX(pivotX); ??????????????? page.setPivotY(pivotY); ??????????????? //動態調整旋轉角度 ??????????????? float roateAngl = MAX_ROTATE * position; ??????????????? page.setRotation(roateAngl); ??????????? } ??????????? //左邊頁面逆時針旋轉 ??????????? //旋轉中心點:底邊中心點->左下角頂點 ??????????? //旋轉角度:順時針旋轉 ??????????? else ??????????? { ??????????????? //動態調整旋轉中心點 ??????????????? float pivotX = 0.5f * page.getWidth() * (1-Math.abs(position)); ??????????????? float pivotY = page.getHeight(); ??????????????? page.setPivotX(pivotX); ??????????????? page.setPivotY(pivotY); ??????????????? //動態調整旋轉角度 ??????????????? float roateAngl = MAX_ROTATE * position; ??????????????? page.setRotation(roateAngl); ??????????? } ??????? } ??????? //右頁移出屏幕時 ??????? else { // (1,+Infinity] ??????????? //右頁順時針旋轉 ??????????? //旋轉中心點:左下角頂點 ??????????? //旋轉角度:順時針旋轉到最大值 ??????????? page.setRotation(MAX_ROTATE); ??????????? page.setPivotX(0); ??????????? page.setPivotY(page.getHeight()); ??????? } ??? } }
舉報
綜合利用ViewPager、Tab等諸多核心技術實現微信主界面的框架搭建任務
1 回答怎么導入的源碼,我的導入選項跟鴻神的不太一樣,沒有他的那個文件夾
2 回答當屏幕旋轉時,TabFragment里的鍵聽就失效了吧
1 回答androidx.fragment.app.FragmentStatePagerAdapter已棄用怎么解決?
2 回答老師,求這個項目的源代碼
1 回答?怎么學viewpage
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2019-12-29
public class RotateTransformer implements ViewPager.PageTransformer {
??? //最大旋轉角度
??? public static final float MAX_ROTATE = 15;
??? //page:左右兩個圖片
??? //position<0時,page表示左頁
??? //position>0時,page表示右頁
??? //position:左右兩頁的滑動比例
??? //1)左頁滑出,右頁滑入:
??? //左頁的position: ( 0 -> -1 )
??? //右頁的position:( 1 -> 0 )
??? //2)右頁滑出,左頁滑入:
??? //左頁的position: ( -1 -> 0 )
??? //右頁的position:( 0 -> 1 )
??? @Override
??? public void transformPage(View page, float position) {
??????? //旋轉中心點:當前頁面的左上角頂點
??????? //旋轉角度正值方向:順時針
??????? //左頁移出屏幕時
??????? if (position < -1) { // [-Infinity,-1)
??????????? //左頁逆時針旋轉
??????????? //旋轉中心:左頁的右下角頂點
??????????? //旋轉角度:逆時針旋轉到最大值
??????????? page.setRotation(-MAX_ROTATE);
??????????? page.setPivotX(page.getWidth());
??????????? page.setPivotY(page.getHeight());
??????? }
??????? //左右頁面都在在屏幕內時
??????? else if (position <= 1) { // [-1,1]
??????????? //左邊頁面逆時針旋轉
??????????? //旋轉中心點:底邊中心點->右下角頂點
??????????? //旋轉角度:逆時針旋轉
??????????? if(position<0){
??????????????? //動態調整旋轉中心點
??????????????? float pivotX = 0.5f * page.getWidth() + 0.5f * page.getWidth() * Math.abs(position);
??????????????? float pivotY = page.getHeight();
??????????????? page.setPivotX(pivotX);
??????????????? page.setPivotY(pivotY);
??????????????? //動態調整旋轉角度
??????????????? float roateAngl = MAX_ROTATE * position;
??????????????? page.setRotation(roateAngl);
??????????? }
??????????? //左邊頁面逆時針旋轉
??????????? //旋轉中心點:底邊中心點->左下角頂點
??????????? //旋轉角度:順時針旋轉
??????????? else
??????????? {
??????????????? //動態調整旋轉中心點
??????????????? float pivotX = 0.5f * page.getWidth() * (1-Math.abs(position));
??????????????? float pivotY = page.getHeight();
??????????????? page.setPivotX(pivotX);
??????????????? page.setPivotY(pivotY);
??????????????? //動態調整旋轉角度
??????????????? float roateAngl = MAX_ROTATE * position;
??????????????? page.setRotation(roateAngl);
??????????? }
??????? }
??????? //右頁移出屏幕時
??????? else { // (1,+Infinity]
??????????? //右頁順時針旋轉
??????????? //旋轉中心點:左下角頂點
??????????? //旋轉角度:順時針旋轉到最大值
??????????? page.setRotation(MAX_ROTATE);
??????????? page.setPivotX(0);
??????????? page.setPivotY(page.getHeight());
??????? }
??? }
}