-
//把dp 轉(zhuǎn)化為 px 此方法可用于單位轉(zhuǎn)換 TypedValue.applyDimension(TypedValus.COMPLEX_UNIT_DIP,50,context.getResources().getDisplayMetrics());查看全部
-
總結(jié)(如圖,簡單明了) 注意: 屬性動畫的內(nèi)容:http://blog.csdn.net/lmj623565791/article/details/39257409查看全部
-
這是上一筆記的圖查看全部
-
抽屜式菜單(二) 1.原理:還是利用nineoldandroids-2.4.0.jar源碼包中的ViewHelper類中的接口來實(shí)現(xiàn) http://blog.csdn.net/lixiaodaoaaa/article/details/41310233,這個文章還有一些其它的ViewHelper的例子 2.首先要明確最后的效果應(yīng)該是什么樣的,借助scale范圍:1.0~0.0來實(shí)現(xiàn) (1)content視圖有1.0~0.7縮放效果: 梯度表達(dá):0.7+0.3*scale (2)菜單視圖有0.7~1.0縮放效果: 梯度表達(dá):1.0-scale*0.3 (3)菜單視圖還有0.6~1.0的透明度變化效果 梯度表達(dá):1.0-0.4*scale 3.具體實(shí)現(xiàn)比較簡單,都是接口的調(diào)用(如圖) (1)設(shè)置menu的縮放效果通過setScaleX()來實(shí)現(xiàn) ViewHelper.setScaleX(mMenu, leftScale); ViewHelper.setScaleY(mMenu, leftScale); (2)設(shè)置透明度變化效果 ViewHelper.setAlpha(mMenu, leftAlpha); (3)設(shè)置content視圖的縮放 這里需要注意要給content設(shè)置一個縮放的中心點(diǎn)為最右邊中心點(diǎn)(下一張圖)查看全部
-
抽屜式菜單(一) 1.原理:使用了nineoldandroids-2.4.0.jar源碼包中的偏移動畫的實(shí)現(xiàn)。 剛開始時,menu的向右偏移量是最大的,為自己的mMenuWith,這樣整個menu就會隱藏在content視圖后面。 當(dāng)向右滑動的過程中,整個HorizontalscrollView都在向右滑,但是同時menu還需要不斷向右偏移,這樣它的左邊就能一直靠在屏幕左邊。但是注意menu向右偏移的寬度在減少。 2.弄清楚兩個概念 (1)屬性動畫的TranslationX 這是指setTranslationX(view, translationX)的第二個參數(shù),即偏移量,大于0表示向右偏移,小于0表示向左偏移 注意: 如果使用Android Studio編程,nineoldandroids包是可以通過添加dependencies來添加進(jìn)來的,不需要下載并放在/libs下。 (2)梯度scale 因?yàn)閯赢嬤^程是比較平緩的,所以應(yīng)該設(shè)置一個float型的梯度值 這個梯度值是通過scrollX來獲得的,scrollX是menu距左邊屏幕的寬度,在整個HorizontalScrollView向右滑動過程中,這個值是漸變的(從mMenuWidth -> 0),和menu視圖向右偏移量對應(yīng)。 3.最后需要考慮的是動畫的實(shí)現(xiàn) 1)ACTION_MOVE中實(shí)現(xiàn) 移動過程中,通過getScrollX()獲取scrollX的值,然后設(shè)置梯度,然后調(diào)用setTranslationX()設(shè)置偏移。 這樣在點(diǎn)擊“切換菜單”的時候不會看到像要的效果。因?yàn)椤扒袚Q菜單”的實(shí)現(xiàn)是直接調(diào)用smoothScrollTo()來實(shí)現(xiàn)的。 2)通過onScrollChanged(int l...) 這個函數(shù)是nineoldandroids包中的,第一個參數(shù)l就是scrollX,而且onScrollChanged()不管是在整個View自動滾動還是手動滾動時都會被調(diào)用,這樣就解決了點(diǎn)擊“切換菜單”的問題。 3)實(shí)現(xiàn)如圖 //l是菜單最左邊距屏幕左邊的寬度,范圍:mMenuWidth->0 //scale范圍:1->0 float scale = l * 1.0f / mMenuWidth; //scale * mMenuWidth偏移量范圍就是:mMenuWidth->0查看全部
-
添加藍(lán)牙切換 1.實(shí)現(xiàn)比較簡單 先實(shí)現(xiàn)兩個打開/關(guān)閉菜單的函數(shù) private void closeMenu() { if(!isOpen)return; this.smoothScrollTo(mMenuWidth, 0); } private void openMenu(){ if(isOpen)return; this.smoothScrollTo(0, 0); } 2.實(shí)現(xiàn)一個關(guān)鍵的toggle()方法,用來統(tǒng)一處理 public void toggle(){ if(isOpen) { closeMenu(); isOpen = false; }else { openMenu(); isOpen = true; } } 3.關(guān)鍵就是學(xué)習(xí)這種實(shí)現(xiàn)思想查看全部
-
自定義左側(cè)菜單距離右側(cè)屏幕的寬度 1.創(chuàng)建一個屬性文件attr.xml <resources> <attr name = "rightPadding" format="dimension" ></attr> <declare-styleable name="SlidingMenu"> <attr name="rightPadding" ></attr> </declare-styleable> </resources> 2.activity_main.xml布局中添加命名空間,并為這個屬性設(shè)置一個值 xmlns:zhangxt4="http://schemas.android.com/apk-res" <SlidingMenu zhangxt4:rightPadding="100dp" 3.當(dāng)使用了自定義的屬性時,會調(diào)用此構(gòu)造方法 SlidingMenu(Context context, AttributeSet attrs, int defStyleAttr) //獲取自定義的屬性 TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.SlidingMenu, defStyleAttr, 0); int n = a.getIndexCount(); for(int i = 0; i < n; i++){ int attr = a.getIndex(i); switch (attr){ case R.styleable.SlidingMenu_rightPadding: //默認(rèn)值 …… mMenuRightPadding = a.getDimensionPixelSize(attr, defautRightPadding); } } 4.自定義屬性和UI模板的知識點(diǎn)參考《Android UI模板設(shè)計》的課程 http://idcbgp.cn/space/notelist/uid/1859625/cid/247查看全部
-
自定義ViewGroup 1.(3)onTouchEvent()監(jiān)聽點(diǎn)擊事件(續(xù)) 這里只需要判斷當(dāng)手指離開屏幕時,整個HorizontalScrollView最左邊離屏幕左邊的距離,即被隱藏的區(qū)域的寬度 int action = ev.getAction(); switch (action){ case MotionEvent.ACTION_UP: //獲取HorizontalScrollView最左邊離屏幕左邊的寬度,即左側(cè)隱藏View的寬度 int scrollX = getScrollX(); if(scrollX >= mMenuWidth/2){ //隱藏寬度比較大,繼續(xù)隱藏 this.smoothScrollTo(mMenuWidth, 0); }else{ this.smoothScrollTo(0, 0); } return true; }查看全部
-
自定義ViewGroup 1.自定義ViewGroup是實(shí)現(xiàn)這個課程關(guān)鍵的一點(diǎn),也是實(shí)現(xiàn)自定義View的關(guān)鍵知識點(diǎn) 2.關(guān)鍵需要實(shí)現(xiàn)三個方法: (1)onMeasure()決定自己和自己內(nèi)部子View的寬和高 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if(!once) { mWapper = (LinearLayout) getChildAt(0); mMenu = (ViewGroup) mWapper.getChildAt(0); mContent = (ViewGroup) mWapper.getChildAt(1); mMenu.getLayoutParams().width = mScreenWidth - mMenuRightPadding; mContent.getLayoutParams().width = mScreenWidth; once = true; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } 用once的目的是防止多次設(shè)置子View的寬和高 (2)onLayout()決定子view放置的位置,這里需要通過設(shè)置偏移量來將左側(cè)菜單的布局隱藏起來 protected void onLayout(boolean changed, int l, int t, int r, int b) { super.onLayout(changed, l, t, r, b); if(changed) { this.scrollTo(mMenuWidth, 0); //scrollTo(x, y) x為正值表示滾動條向右移動,x的值表示HorizontalScrollView的最左邊距離屏幕的寬度 } } (3)onTouchEvent()監(jiān)聽點(diǎn)擊事件(續(xù))查看全部
-
菜單布局 1.首先主布局是一個RelativeLayout,內(nèi)套一個HorizontalScrollView。 HorizontalScrollView內(nèi)套一個水平的LinearLayout,在這個LinearLayout的左邊就是菜單欄,右邊是主要內(nèi)容 2.左邊的菜單欄的布局,具體內(nèi)容見代碼 (1)整體是RelativeLayout,內(nèi)套一個垂直方向的LinearLayout (2)在這個LinearLayout中,垂直放置有5個菜單項 (3)每個菜單項是一個RelativeLayout,每個RelativeLayout中,左邊是一個ImageView,右邊是一個TextView 3.查看全部
-
原理: 實(shí)現(xiàn)一個ViewGroup,繼承HorizontalScrollView(如圖)查看全部
-
在ListView中每個行布局能實(shí)現(xiàn)這樣的效果嗎查看全部
-
自定義屬性: 1:attrs.xml 2:xmlns:...,使用屬性 3.三個參數(shù)的構(gòu)造函數(shù)內(nèi)讀取值查看全部
-
android studio里,在activity_main中,不需要自己手動定義xmlns命名空間,系統(tǒng)會自動補(bǔ)充xmlns:app="http://schemas.android.com/apk/res-auto"查看全部
-
onlayout查看全部
舉報
0/150
提交
取消