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