課程
/移動開發(fā)
/Android
/QQ5.0側(cè)滑菜單
這樣計算就能感覺菜單在內(nèi)容區(qū)域后面?我怎么就反應(yīng)不過來呢。
2016-03-20
源自:QQ5.0側(cè)滑菜單 1-6
正在回答
/**
* 滾動發(fā)生時,調(diào)用本方法 l即為 getScrollX(); // 隱藏在左邊的寬度
*/
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
float scale = l * 1.0f / mMenuWidth;
* scale:1.0~0.0?
* 區(qū)別1:美容區(qū)與1.0~0.85的縮放效果 0.7+0.15*scale.
* 區(qū)別2:菜單的偏移量需要修改.
* 區(qū)別3:菜單的顯示過程中有縮放以及透明度的變化,如下所示: 縮放目標效果0.7~1.0:1.0-scale*0.3.
* 透明度目標效果0.6~1.0:0.6+0.4*(1-scale);
float rightScale = 0.85f + 0.15f * scale;
float leftScale = 1.0f - 0.3f * scale;
float leftAlpha = 1.0f - 0.4f * scale;
// 調(diào)用屬性動畫,設(shè)置關(guān)于菜單欄的Translation
* 關(guān)于ViewHelper.setTranslationX(view, translationX);
* 這里的view 是您要移動哪個View 就是哪個東西你要將他在界面上進行活動呢?
* ?translationX是指你移動的距離(X為水平,Y為豎直)
ViewHelper.setTranslationX(mMenu, l*0.8f);//第二個參數(shù)實現(xiàn)的效果是緩緩拉出的感覺,范圍是l~0
ViewHelper.setScaleX(mMenu,leftScale);
ViewHelper.setScaleY(mMenu,leftScale);
ViewHelper.setAlpha(mMenu, leftAlpha);//設(shè)置透明度
//內(nèi)容區(qū)域的中心點偏移量,橫坐標不變,縱坐標為原來高度的1/2
ViewHelper.setPivotX(mContent, 0);
ViewHelper.setPivotY(mContent, mContent.getHeight() * 1 / 2);
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale);
}
慕勒1082463
所謂的效果都是通過設(shè)置餐單或者內(nèi)容模塊的位置從而實現(xiàn)看起來的滑動效果。你只需要知道起點和終點的值即可(這個例子是水平方向的點),途中的動畫過程自然就實現(xiàn)了。比如說:拉出菜單的過程:menu的起點為
-menuWidth,終點為0;而content的起點為0,終點為menuWidth。這樣解釋不知道能不能幫到你。
舉報
本教程將帶領(lǐng)大家通過自定義控件實現(xiàn)QQ5.0側(cè)滑菜單
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-05-25
/**
* 滾動發(fā)生時,調(diào)用本方法 l即為 getScrollX(); // 隱藏在左邊的寬度
*/
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
float scale = l * 1.0f / mMenuWidth;
/**
* scale:1.0~0.0?
* 區(qū)別1:美容區(qū)與1.0~0.85的縮放效果 0.7+0.15*scale.
* 區(qū)別2:菜單的偏移量需要修改.
* 區(qū)別3:菜單的顯示過程中有縮放以及透明度的變化,如下所示: 縮放目標效果0.7~1.0:1.0-scale*0.3.
* 透明度目標效果0.6~1.0:0.6+0.4*(1-scale);
*/
float rightScale = 0.85f + 0.15f * scale;
float leftScale = 1.0f - 0.3f * scale;
float leftAlpha = 1.0f - 0.4f * scale;
// 調(diào)用屬性動畫,設(shè)置關(guān)于菜單欄的Translation
/**
* 關(guān)于ViewHelper.setTranslationX(view, translationX);
* 這里的view 是您要移動哪個View 就是哪個東西你要將他在界面上進行活動呢?
* ?translationX是指你移動的距離(X為水平,Y為豎直)
*/
ViewHelper.setTranslationX(mMenu, l*0.8f);//第二個參數(shù)實現(xiàn)的效果是緩緩拉出的感覺,范圍是l~0
ViewHelper.setScaleX(mMenu,leftScale);
ViewHelper.setScaleY(mMenu,leftScale);
ViewHelper.setAlpha(mMenu, leftAlpha);//設(shè)置透明度
//內(nèi)容區(qū)域的中心點偏移量,橫坐標不變,縱坐標為原來高度的1/2
ViewHelper.setPivotX(mContent, 0);
ViewHelper.setPivotY(mContent, mContent.getHeight() * 1 / 2);
ViewHelper.setScaleX(mContent, rightScale);
ViewHelper.setScaleY(mContent, rightScale);
}
2016-05-25
所謂的效果都是通過設(shè)置餐單或者內(nèi)容模塊的位置從而實現(xiàn)看起來的滑動效果。你只需要知道起點和終點的值即可(這個例子是水平方向的點),途中的動畫過程自然就實現(xiàn)了。比如說:拉出菜單的過程:menu的起點為
-menuWidth,終點為0;而content的起點為0,終點為menuWidth。這樣解釋不知道能不能幫到你。