日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁編程開發(fā)Android → Android開發(fā)實現(xiàn)qqminihd 左右滑動菜單效果

      Android開發(fā)實現(xiàn)qqminihd 左右滑動菜單效果

      相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/10/17 8:18:00字體大小:A-A+

      作者:佚名點擊:148次評論:0次標(biāo)簽: Android開發(fā)

      • 類型:編程工具大。13.8M語言:英文 評分:5.5
      • 標(biāo)簽:
      立即下載

      觀察qqminihd界面,發(fā)現(xiàn)其界面能夠左右滑動來實現(xiàn)兩側(cè)菜單效果。

      自定義Layout:ScrollLayout.java

      直接貼出代碼:

        1 package grimbo.android.demo.slidingmenu;
        2
        3 import android.content.Context;
        4 import android.util.AttributeSet;
        5 import android.util.Log;
        6 import android.view.GestureDetector;
        7 import android.view.GestureDetector.OnGestureListener;
        8 import android.view.MotionEvent;
        9 import android.view.View;
      10 import android.view.ViewConfiguration;
      11 import android.view.animation.AnimationUtils;
      12 import android.widget.LinearLayout;
      13 import android.widget.Scroller;
      14
      15 public class ScrollLayout extends LinearLayout {
      16
      17 //    private static final String TAG = "scroller";
      18
      19     private Scroller scroller;
      20
      21     private int currentScreenIndex;
      22
      23     private GestureDetector gestureDetector;
      24
      25     // 設(shè)置一個標(biāo)志位,防止底層的onTouch事件重復(fù)處理UP事件
      26     private boolean fling;
      27
      28     /**
      29      * 菜單欄的寬度
      30      */
      31     int menuWidth=80;
      32    
      33     /**
      34      * 顯示左邊菜單
      35      * 否則顯示右邊菜單
      36      */
      37     private boolean showLeft=true;
      38    
      39     /**
      40      * 滾出邊界監(jiān)聽器
      41      */
      42     private OnScrollSideChangedListener scrollSideChangedListener;
      43    
      44     public Scroller getScroller() {
      45             return scroller;
      46     }
      47
      48     public OnScrollSideChangedListener getScrollSideChangedListener() {
      49         return scrollSideChangedListener;
      50     }
      51
      52     public void setScrollSideChangedListener(
      53             OnScrollSideChangedListener scrollSideChangedListener) {
      54         this.scrollSideChangedListener = scrollSideChangedListener;
      55     }
      56
      57     public ScrollLayout(Context context, AttributeSet attrs) {
      58             super(context, attrs);
      59             initView(context);
      60     }
      61
      62     public ScrollLayout(Context context) {
      63             super(context);
      64             initView(context);
      65     }
      66
      67     private void initView(final Context context) {
      68             this.scroller = new Scroller(context,AnimationUtils.loadInterpolator(context,
      69                     android.R.anim.overshoot_interpolator));
      70
      71             this.gestureDetector = new GestureDetector(new OnGestureListener() {
      72
      73                     @Override
      74                     public boolean onSingleTapUp(MotionEvent e) {
      75                             return false;
      76                     }
      77
      78                     @Override
      79                     public void onShowPress(MotionEvent e) {
      80                     }
      81
      82                     @Override
      83                     public boolean onScroll(MotionEvent e1, MotionEvent e2,
      84                                     float distanceX, float distanceY) {
      85
      86                             {// 防止向第一頁之前移動
      87                                 if(1==currentScreenIndex)
      88                                 {
      89                                     int screenLeft=getWidth()-menuWidth;
      90                                     if(showLeft && getScrollX()>screenLeft)
      91                                     {
      92                                         showLeft=false;
      93 //                                        Log.e("TAG","顯示右邊菜單欄");
      94                                         if(null!=scrollSideChangedListener)
      95                                             scrollSideChangedListener.onScrollSideChanged(ScrollLayout.this, showLeft);
      96                                     }
      97                                     else if(!showLeft && getScrollX()<screenLeft)
      98                                     {
      99                                         showLeft=true;
      100 //                                        Log.e("TAG","顯示左邊菜單欄");
      101                                         if(null!=scrollSideChangedListener)
      102                                             scrollSideChangedListener.onScrollSideChanged(ScrollLayout.this, showLeft);
      103                                     }
      104                                 }
      105                                
      106                                     fling = true;
      107                                     scrollBy((int) distanceX, 0);
      108 //                                    Log.d("TAG", "on scroll>>>>>>>>>>>>>>>>>移動<<<<<<<<<<<<<<>>>");
      109                             }
      110                             return true;
      111                     }
      112
      113                     @Override
      114                     public void onLongPress(MotionEvent e) {
      115                     }
      116
      117                     @Override
      118                     public boolean onFling(MotionEvent e1, MotionEvent e2,
      119                                     float velocityX, float velocityY) {
      120                        
      121                             if (Math.abs(velocityX) > ViewConfiguration.get(context)
      122                                             .getScaledMinimumFlingVelocity())
      123                             {// 判斷是否達(dá)到最小輕松速度,取絕對值的
      124                                 fling = true;
      125                                 snapToDestination();
      126 //                                Log.d(TAG, "on scroll>>>>>>>>>>>>>>>>>滑動<<<<<<<<<<<<<<>>>");
      127                             }
      128
      129                             return true;
      130                     }
      131
      132                     @Override
      133                     public boolean onDown(MotionEvent e) {
      134                             return false;
      135                     }
      136             });
      137            
      138     }
      139     //每一個屏的邊界值
      140     //0----[getWidth()-20]----[2*getWidth()-20]-----[3*getWidth()-40]
      141    
      142    
      143     @Override
      144     protected void onLayout(boolean changed, int left, int top, int right,
      145                     int bottom) {
      146             /**
      147              * 設(shè)置布局,將子視圖順序橫屏排列
      148              */
      149             super.onLayout(changed, left, top, right, bottom);
      150             int move=getWidth()-menuWidth;
      151             for (int i = 0; i < getChildCount(); i++)
      152             {
      153                     View child = getChildAt(i);
      154 //                    child.setVisibility(View.VISIBLE);
      155                     //移動一定的距離
      156                     child.layout(child.getLeft()+move,child.getTop(),child.getRight()+move,child.getBottom());
      157             }
      158     }
      159
      160     @Override
      161     public void computeScroll() {
      162             if (scroller.computeScrollOffset()) {
      163 //                    Log.d(TAG, ">>>>>>>>>>computeScroll>>>>>"+scroller.getCurrX());
      164                     scrollTo(scroller.getCurrX(), 0);
      165                     postInvalidate();
      166             }
      167     }
      168
      169     @Override
      170     public boolean onTouchEvent(MotionEvent event) {
      171            
      172             float x2s=getScrollX()+event.getX();
      173            
      174             if(x2s<getWidth()-menuWidth || x2s>2*getWidth()-menuWidth)
      175             {//動作在區(qū)域外面
      176                 if(!fling)//沒有在滑動
      177                 {
      178 //                    Log.d(TAG, "on scroll>>>>>>>>>>>>>>>>>動作在區(qū)域外面 沒有在滑動<<<<<<<<<<<<<<>>>");
      179                     return false;
      180                 }
      181                 else if(MotionEvent.ACTION_UP!=event.getAction())
      182                 {//否則如果也不是抬起手勢,則強(qiáng)制模擬抬起
      183                     snapToDestination();
      184                     fling = false;
      185 //                    Log.d(TAG, "on scroll>>>>>>>>>>>>>>>>>動作在區(qū)域外面 在滑動 也不是抬起手勢<<<<<<<<<<<<<<>>>");
      186                     return false;
      187                 }
      188 //                Log.e(TAG, "on scroll>>>>>>>>>>>>>>>>>動作在區(qū)域外面 在滑動 是抬起手勢<<<<<<<<<<<<<<>>>");
      189             }
      190            
      191             gestureDetector.onTouchEvent(event);
      192
      193             switch (event.getAction()) {
      194             case MotionEvent.ACTION_DOWN:
      195                     break;
      196             case MotionEvent.ACTION_MOVE:
      197                     break;
      198             case MotionEvent.ACTION_UP:
      199 //                    Log.d(TAG, ">>ACTION_UP:>>>>>>>> MotionEvent.ACTION_UP>>>>>");
      200 //                    if (!fling)
      201                     {
      202                             snapToDestination();
      203                     }
      204                     fling = false;
      205                     break;
      206             default:
      207                     break;
      208             }
      209             return true;
      210     }
      211
      212     /**
      213      * 切換到指定屏
      214      *
      215      * @param whichScreen
      216      */
      217     public void scrollToScreen(int whichScreen) {
      218             if (getFocusedChild() != null && whichScreen != currentScreenIndex
      219                             && getFocusedChild() == getChildAt(currentScreenIndex)) {
      220                     getFocusedChild().clearFocus();
      221             }
      222             int delta = 0;
      223            
      224             if(whichScreen==0)
      225                 delta= - getScrollX();
      226             else if(whichScreen==1)
      227                 delta= getWidth()-menuWidth- getScrollX();
      228             else if(whichScreen==2)
      229                 delta= 2*(getWidth()-menuWidth)- getScrollX();
      230             else
      231                 return;
      232 //                delta = whichScreen * getWidth() - getScrollX();
      233            
      234             scroller.startScroll(getScrollX(), 0, delta, 0, Math.abs(delta) * 2);
      235             invalidate();
      236
      237             currentScreenIndex = whichScreen;
      238     }
      239
      240     /**
      241      * 根據(jù)當(dāng)前x坐標(biāo)位置確定切換到第幾屏
      242      */
      243     private void snapToDestination() {
      244        
      245         if(getScrollX()<(getWidth()-menuWidth)/2)
      246             scrollToScreen(0);
      247         else if(getScrollX()<(getWidth()-menuWidth+getWidth()/2))
      248             scrollToScreen(1);
      249         else
      250             scrollToScreen(2);
      251     }
      252
      253     public interface OnScrollSideChangedListener
      254     {
      255         public void onScrollSideChanged(View v,boolean leftSide);
      256     }
      257 }

      接下來,在定義activity里面的布局my_layout.xml:

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3     xmlns:app="http://schemas.android.com/apk/res/grimbo.android.demo.slidingmenu"
      4     android:id="@+id/FrameLayout1"
      5     android:layout_width="match_parent"
      6     android:layout_height="match_parent" >
      7     <LinearLayout
      8         android:layout_width="match_parent"
      9         android:layout_height="match_parent"
      10         android:id="@+id/left_menu"
      11         android:background="#333"
      12         android:orientation="vertical" >
      13
      14         <Button
      15             android:layout_width="200dp"
      16             android:layout_height="wrap_content"
      17             android:text="左菜單一" />
      18         <Button
      19             android:layout_width="200dp"
      20             android:layout_height="wrap_content"
      21             android:text="左菜單二" />
      22     </LinearLayout>
      23
      24     <LinearLayout
      25         android:id="@+id/right_menu"
      26         android:layout_width="match_parent"
      27         android:layout_height="match_parent"
      28         android:background="#666"
      29         android:orientation="horizontal" >
      30         <LinearLayout
      31             android:layout_width="wrap_content"
      32             android:layout_height="wrap_content"
      33             android:layout_weight="1"
      34             android:orientation="vertical" >
      35         </LinearLayout>
      36         <LinearLayout
      37             android:layout_width="200dp"
      38             android:layout_height="wrap_content"
      39             android:orientation="vertical" >
      40             <Button
      41                 android:layout_width="match_parent"
      42                 android:layout_height="wrap_content"
      43                 android:text="右菜單一" />
      44             <Button
      45                 android:layout_width="match_parent"
      46                 android:layout_height="wrap_content"
      47                 android:text="右菜單二" />
      48            
      49         </LinearLayout>
      50        
      51     </LinearLayout>
      52     <grimbo.android.demo.slidingmenu.ScrollLayout
      53         android:layout_width="match_parent"
      54         android:orientation="vertical"
      55         android:id="@+id/my_scrollLayout"
      56         android:layout_height="match_parent">
      57         <LinearLayout
      58             android:layout_width="match_parent"
      59             android:layout_height="match_parent"
      60             android:background="#aaa"
      61             android:orientation="vertical" >
      62
      63
      64             <Button
      65                 android:id="@+id/button1"
      66                 android:layout_width="match_parent"
      67                 android:layout_height="wrap_content"
      68                 android:text="Button Button" />
      69
      70             <Spinner
      71                 android:id="@+id/spinner1"
      72                 android:layout_width="match_parent"
      73                 android:layout_height="wrap_content" />
      74
      75             <SeekBar
      76                 android:id="@+id/seekBar1"
      77                 android:layout_width="match_parent"
      78                 android:layout_height="wrap_content" />
      79            
      80         </LinearLayout>
      81
      82     </grimbo.android.demo.slidingmenu.ScrollLayout>
      83    
      84 </FrameLayout>

      最后,在activity里面的onCreate函數(shù)里加上:

       1 setContentView(R.layout.my_layout);
       2         
       3         final LinearLayout left=(LinearLayout)findViewById(R.id.left_menu);
       4         final LinearLayout right=(LinearLayout)findViewById(R.id.right_menu);
       5         right.setVisibility(View.GONE);
       6         left.setVisibility(View.VISIBLE);
       7         
       8         ScrollLayout mScrollLayout=(ScrollLayout)findViewById(R.id.my_scrollLayout);
       9         mScrollLayout.setScrollSideChangedListener(new OnScrollSideChangedListener() {
      10             @Override
      11             public void onScrollSideChanged(View v, boolean leftSide) {
      12                 if(leftSide)
      13                 {
      14                     right.setVisibility(View.GONE);
      15                     left.setVisibility(View.VISIBLE);
      16                 }else
      17                 {
      18                     right.setVisibility(View.VISIBLE);
      19                     left.setVisibility(View.GONE);
      20                 }
      21             }
      22         });

      大功告成!左右滑動是彈性效果也一并實現(xiàn)~

        app制作
        (8)app制作
        一款好的不僅需要有創(chuàng)意的開發(fā)人員還要有一款合適的制作軟件,有時候一款好用的制作軟件可以讓開發(fā)人員節(jié)省很多不必要的時間。另外對于一些不懂編程的人員來說制作一款也不是沒有可能的,有些功能強(qiáng)大的制作軟件可以讓完全不懂編程的人也能制作出一些精美的來,比如一些公司的產(chǎn)品展示這類不需要有自己特色的就可以通過制作軟件輕松做出來。這里西西給大家收整理了一些好用的制作軟件下載,希望對大家有所幫助。...更多>>
        • appBookv1.0 官方版

          07-04 / 132.6M

          推薦理由:appBook 一次編輯多平臺發(fā)布 輕松擁有自己的app,appBook是全球首家運行在PC和Mac的移動平臺應(yīng)用編輯制作軟
        • 安卓平臺反編譯神器(Apktool)v6.0.

          02-19 / 13.0M

          推薦理由:Apktool,一款安卓移動平臺上的反編譯利器!Apktool現(xiàn)已完美兼容Android5.0L,使用它可以修改軟件應(yīng)用名稱,
        • myeclipse 10.0

          11-03 / 886M

          推薦理由:MyEclipse 10使用最高級的桌面和Web開發(fā)技術(shù),包括 HTML5 和 Java EE 6,支持 JPA 2.0、JSF 2.0 、Eclipsel
        • 移動應(yīng)用開發(fā)工具(AppCan IDE)V3.1

          11-14 / 421.8M

          推薦理由:AppCan應(yīng)用使用HTML5、CSS3和JavaScript語言編寫,通過AppCan IDE提供的本地打包工具或在線編譯系統(tǒng)生成可在
        • appMaker中文版v1.0 官方免費版

          03-06 / 315.8M

          推薦理由:appMaker中文版是一款免費的app制作軟件,可以制作各種展示類的app。如:移動互動電子書、電子雜志、地產(chǎn)樓
        • 安卓開發(fā)(Google Android SDK)r24.

          05-15 / 85.8M

          推薦理由:Google Android SDKAndroid是Google自己研發(fā)的手機(jī)平臺操作系統(tǒng),該平臺基于開源軟件Linux,由操作系統(tǒng)、中
        eclipse
        (119)eclipse
        是對的擴(kuò)展,利用它我們可以在數(shù)據(jù)庫和的開發(fā)發(fā)布以及應(yīng)用程序服務(wù)器的整合方面極大的提高工作效率。它是功能豐富的集成開發(fā)環(huán)境,包括了完備的編碼調(diào)試測試和發(fā)布功能,完整支持,,,,,,,。分類在結(jié)構(gòu)上,的特征可以被分為類模型開發(fā)工具開發(fā)工具應(yīng)用程序服務(wù)器的連接器項目部署服務(wù)數(shù)據(jù)庫服務(wù)整合幫助...更多>>
        eclipse中文版下載
        (27)eclipse中文版下載
        是一個開放源代碼的基于的可擴(kuò)展開發(fā)平臺。還包括插件開發(fā)環(huán)境,,這個組件主要針對希望擴(kuò)展的軟件開發(fā)人員,因為它允許他們構(gòu)建與環(huán)境無縫集成的工具。它只是一個框架和一組服務(wù),用于通過插件組件構(gòu)建開發(fā)環(huán)境。幸運的是,附帶了一個標(biāo)準(zhǔn)的插件集,包括開發(fā)工具,。漢化方法把語言包中的,文件夾直接覆蓋到安裝目錄中,或者把漢化包放到目錄下面。常用快捷鍵.快速修復(fù).刪除當(dāng)前行.復(fù)制當(dāng)前行到下一行.或者說是空格由于后者與輸入法...更多>>
        JAVA軟件
        (60)JAVA軟件
        軟件下載,編程軟件下載專題有多款適合編程愛好者學(xué)習(xí)使用的軟件,我們提供了適用于開發(fā)者使用的相關(guān)軟件的各個版本跟新的下載地址,以方便各位愛好者使用學(xué)習(xí)。如果您有什么好的編程軟件可以向我們提供分享下載,如果下載的軟件有什么問題也可以向我們提供建議,祝程序員們學(xué)習(xí)愉快軟件開發(fā)其實可以不用其他軟件的。只需要安裝了工具包即可,這個是必須的。并且一定要配置好系統(tǒng)的環(huán)境變量。這個可以到網(wǎng)上去查,網(wǎng)上很多。然后進(jìn)...更多>>

        相關(guān)評論

        閱讀本文后您有什么感想? 已有人給出評價!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無聊無聊

        熱門評論

        最新評論

        發(fā)表評論 查看所有評論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)