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