AndroidResideMenu

 

![](http://www.2cto.com/uploadfile/Collfiles/20140911/20140911091421122.gif)

先看看如何使用:

把项目源码下载下来导入工程,可以看到

![](http://www.2cto.com/uploadfile/Collfiles/20140911/20140911091422123.jpg)

ResideMenu为引用工程,再看看如何使用这个引用工程来构建出ResideMenu,

1.先new一个ResideMenu对象

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `resideMenu = ``new` `ResideMenu(``this``);`
        </div>
      </div>
    </td>
  </tr>
</table>

2.设置它的背景图片

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `resideMenu.setBackground(R.drawable.menu_background);`
        </div>
      </div>
    </td>
  </tr>
</table>

3.绑定当前Activity

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `resideMenu.attachToActivity(``this``);`
        </div>
      </div>
    </td>
  </tr>
</table>

4.设置监听

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `resideMenu.setMenuListener(menuListener);`
        </div>
      </div>
    </td>
  </tr>
</table>

可以监听菜单打开和关闭状态

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `private` `ResideMenu.OnMenuListener menuListener = ``new` `ResideMenu.OnMenuListener() {`
        </div>
        
        <div class="line number2 index1 alt1">
          `    ``@Override`
        </div>
        
        <div class="line number3 index2 alt2">
          `    ``public` `void` `openMenu() {`
        </div>
        
        <div class="line number4 index3 alt1">
          `        ``Toast.makeText(mContext, Menu is opened!, Toast.LENGTH_SHORT).show();`
        </div>
        
        <div class="line number5 index4 alt2">
          `    ``}`
        </div>
        
        <div class="line number6 index5 alt1">
        </div>
        
        <div class="line number7 index6 alt2">
          `    ``@Override`
        </div>
        
        <div class="line number8 index7 alt1">
          `    ``public` `void` `closeMenu() {`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``Toast.makeText(mContext, Menu is closed!, Toast.LENGTH_SHORT).show();`
        </div>
        
        <div class="line number10 index9 alt1">
          `    ``}`
        </div>
        
        <div class="line number11 index10 alt2">
          `};`
        </div>
      </div>
    </td>
  </tr>
</table>

5.设置内容缩放比例(0.1~1f)

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `//valid scale factor is between 0.0f and 1.0f. leftmenu'width is 150dip. `
        </div>
        
        <div class="line number2 index1 alt1">
          `        ``resideMenu.setScaleValue(````.6f);`
        </div>
      </div>
    </td>
  </tr>
</table>

6.创建子菜单

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `// create menu items;`
        </div>
        
        <div class="line number2 index1 alt1">
          `       ``itemHome     = ``new` `ResideMenuItem(``this``, R.drawable.icon_home,     Home);`
        </div>
        
        <div class="line number3 index2 alt2">
          `       ``itemProfile  = ``new` `ResideMenuItem(``this``, R.drawable.icon_profile,  Profile);`
        </div>
        
        <div class="line number4 index3 alt1">
          `       ``itemCalendar = ``new` `ResideMenuItem(``this``, R.drawable.icon_calendar, Calendar);`
        </div>
        
        <div class="line number5 index4 alt2">
          `       ``itemSettings = ``new` `ResideMenuItem(``this``, R.drawable.icon_settings, Settings);`
        </div>
      </div>
    </td>
  </tr>
</table>

7.设置点击事件及将刚创建的子菜单添加到侧换菜单中(可以看到它是通过常量来控制子菜单的添加位置)

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `itemHome.setOnClickListener(``this``);`
        </div>
        
        <div class="line number2 index1 alt1">
          `        ``itemProfile.setOnClickListener(``this``);`
        </div>
        
        <div class="line number3 index2 alt2">
          `        ``itemCalendar.setOnClickListener(``this``);`
        </div>
        
        <div class="line number4 index3 alt1">
          `        ``itemSettings.setOnClickListener(``this``);`
        </div>
        
        <div class="line number5 index4 alt2">
        </div>
        
        <div class="line number6 index5 alt1">
          `        ``resideMenu.addMenuItem(itemHome, ResideMenu.DIRECTION_LEFT);`
        </div>
        
        <div class="line number7 index6 alt2">
          `        ``resideMenu.addMenuItem(itemProfile, ResideMenu.DIRECTION_LEFT);`
        </div>
        
        <div class="line number8 index7 alt1">
          `        ``resideMenu.addMenuItem(itemCalendar, ResideMenu.DIRECTION_RIGHT);`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``resideMenu.addMenuItem(itemSettings, ResideMenu.DIRECTION_RIGHT);`
        </div>
      </div>
    </td>
  </tr>
</table>

8.设置title按钮的点击事件,设置左右菜单的开关

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
      
      <div class="line number12 index11 alt1">
        12
      </div>
      
      <div class="line number13 index12 alt2">
        13
      </div>
      
      <div class="line number14 index13 alt1">
        14
      </div>
      
      <div class="line number15 index14 alt2">
        15
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `// You can disable a direction by setting -&gt;`
        </div>
        
        <div class="line number2 index1 alt1">
          `        ``// resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);`
        </div>
        
        <div class="line number3 index2 alt2">
        </div>
        
        <div class="line number4 index3 alt1">
          `        ``findViewById(R.id.title_bar_left_menu).setOnClickListener(``new` `View.OnClickListener() {`
        </div>
        
        <div class="line number5 index4 alt2">
          `            ``@Override`
        </div>
        
        <div class="line number6 index5 alt1">
          `            ``public` `void` `onClick(View view) {`
        </div>
        
        <div class="line number7 index6 alt2">
          `                ``resideMenu.openMenu(ResideMenu.DIRECTION_LEFT);`
        </div>
        
        <div class="line number8 index7 alt1">
          `            ``}`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``});`
        </div>
        
        <div class="line number10 index9 alt1">
          `        ``findViewById(R.id.title_bar_right_menu).setOnClickListener(``new` `View.OnClickListener() {`
        </div>
        
        <div class="line number11 index10 alt2">
          `            ``@Override`
        </div>
        
        <div class="line number12 index11 alt1">
          `            ``public` `void` `onClick(View view) {`
        </div>
        
        <div class="line number13 index12 alt2">
          `                ``resideMenu.openMenu(ResideMenu.DIRECTION_RIGHT);`
        </div>
        
        <div class="line number14 index13 alt1">
          `            ``}`
        </div>
        
        <div class="line number15 index14 alt2">
          `        ``});`
        </div>
      </div>
    </td>
  </tr>
</table>

9.还重写了dispatchTouchEvent

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `@Override`
        </div>
        
        <div class="line number2 index1 alt1">
          `    ``public` `boolean` `dispatchTouchEvent(MotionEvent ev) {`
        </div>
        
        <div class="line number3 index2 alt2">
          `        ``return` `resideMenu.dispatchTouchEvent(ev);`
        </div>
        
        <div class="line number4 index3 alt1">
          `    ``}`
        </div>
      </div>
    </td>
  </tr>
</table>

10.菜单关闭方法

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `resideMenu.closeMenu();`
        </div>
      </div>
    </td>
  </tr>
</table>

 

11.屏蔽菜单方法

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `// You can disable a direction by setting -&gt;`
        </div>
        
        <div class="line number2 index1 alt1">
          `        ``// resideMenu.setSwipeDirectionDisable(ResideMenu.DIRECTION_RIGHT);`
        </div>
      </div>
    </td>
  </tr>
</table>

 

使用方法已经说完了,接下来,看看它的源码,先看看源码的项目结构。

![](http://www.2cto.com/uploadfile/Collfiles/20140911/20140911091422126.jpg)

 

很多人初学者都曾纠结,看源码,如何从何看起,我个人建议从上面使用的顺序看起,并且在看的时候要带个问题去看去思考,这样更容易理解。

上面的第一步是,创建ResideMenu对象,我们就看看ResideMenu的构造。

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `public` `ResideMenu(Context context) {`
        </div>
        
        <div class="line number2 index1 alt1">
          `        ``super``(context);`
        </div>
        
        <div class="line number3 index2 alt2">
          `        ``initViews(context);`
        </div>
        
        <div class="line number4 index3 alt1">
          `    ``}`
        </div>
      </div>
    </td>
  </tr>
</table>

从上面代码,看到构造里面就一个初始化view,思考问题:如何初始化view及初始化了什么view。

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `private` `void` `initViews(Context context){`
        </div>
        
        <div class="line number2 index1 alt1">
          `        ``LayoutInflater inflater = (LayoutInflater)`
        </div>
        
        <div class="line number3 index2 alt2">
          `                ``context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);`
        </div>
        
        <div class="line number4 index3 alt1">
          `        ``inflater.inflate(R.layout.residemenu, ``this``);`
        </div>
        
        <div class="line number5 index4 alt2">
          `        ``scrollViewLeftMenu = (ScrollView) findViewById(R.id.sv_left_menu);`
        </div>
        
        <div class="line number6 index5 alt1">
          `        ``scrollViewRightMenu = (ScrollView) findViewById(R.id.sv_right_menu);`
        </div>
        
        <div class="line number7 index6 alt2">
          `        ``imageViewShadow = (ImageView) findViewById(R.id.iv_shadow);`
        </div>
        
        <div class="line number8 index7 alt1">
          `        ``layoutLeftMenu = (LinearLayout) findViewById(R.id.layout_left_menu);`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``layoutRightMenu = (LinearLayout) findViewById(R.id.layout_right_menu);`
        </div>
        
        <div class="line number10 index9 alt1">
          `        ``imageViewBackground = (ImageView) findViewById(R.id.iv_background);`
        </div>
        
        <div class="line number11 index10 alt2">
          `    ``}`
        </div>
      </div>
    </td>
  </tr>
</table>

原理分析:从上面的代码可以看到,加载了一个residemenu的布局,先看布局

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
      
      <div class="line number4 index3 alt1">
        4
      </div>
      
      <div class="line number5 index4 alt2">
        5
      </div>
      
      <div class="line number6 index5 alt1">
        6
      </div>
      
      <div class="line number7 index6 alt2">
        7
      </div>
      
      <div class="line number8 index7 alt1">
        8
      </div>
      
      <div class="line number9 index8 alt2">
        9
      </div>
      
      <div class="line number10 index9 alt1">
        10
      </div>
      
      <div class="line number11 index10 alt2">
        11
      </div>
      
      <div class="line number12 index11 alt1">
        12
      </div>
      
      <div class="line number13 index12 alt2">
        13
      </div>
      
      <div class="line number14 index13 alt1">
        14
      </div>
      
      <div class="line number15 index14 alt2">
        15
      </div>
      
      <div class="line number16 index15 alt1">
        16
      </div>
      
      <div class="line number17 index16 alt2">
        17
      </div>
      
      <div class="line number18 index17 alt1">
        18
      </div>
      
      <div class="line number19 index18 alt2">
        19
      </div>
      
      <div class="line number20 index19 alt1">
        20
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `&lt;!--?xml version=``1.0` `encoding=utf-``8``?--&gt;`
        </div>
        
        <div class="line number2 index1 alt1">
        </div>
        
        <div class="line number3 index2 alt2">
          `&lt;framelayout android:layout_height=``"match_parent"` `android:layout_width=``"match_parent"` `xmlns:android=``"&lt;a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android&lt;/a>"``&gt;`
        </div>
        
        <div class="line number4 index3 alt1">
          `    ``&lt;imageview android:adjustviewbounds=``"true"` `android:id=``"@+id/iv_background"` `android:layout_height=``"match_parent/"` `android:layout_width=``"match_parent"` `android:scaletype=``"centerCrop"``&gt;`
        </div>
        
        <div class="line number5 index4 alt2">
        </div>
        
        <div class="line number6 index5 alt1">
          `    ``&lt;imageview android:background=``"@drawable/shadow"` `android:id=``"@+id/iv_shadow"` `android:layout_height=``"fill_parent"` `android:layout_width=``"fill_parent"` `android:scaletype=``"fitXY/"``&gt;`
        </div>
        
        <div class="line number7 index6 alt2">
        </div>
        
        <div class="line number8 index7 alt1">
          `    ``&lt;scrollview android:id=``"@+id/sv_left_menu"` `android:layout_height=``"fill_parent"` `android:layout_width=``"150dp"` `android:paddingleft=``"30dp"` `android:scrollbars=``"none"``&gt;`
        </div>
        
        <div class="line number9 index8 alt2">
          `        ``&lt;linearlayout android:id=``"@+id/layout_left_menu"` `android:layout_gravity=``"center_vertical"` `android:layout_height=``"wrap_content"` `android:layout_width=``"wrap_content"` `android:orientation=``"vertical"``&gt;`
        </div>
        
        <div class="line number10 index9 alt1">
        </div>
        
        <div class="line number11 index10 alt2">
          `        ``&lt;/linearlayout&gt;`
        </div>
        
        <div class="line number12 index11 alt1">
          `    ``&lt;/scrollview&gt;`
        </div>
        
        <div class="line number13 index12 alt2">
        </div>
        
        <div class="line number14 index13 alt1">
          `    ``&lt;scrollview android:id=``"@+id/sv_right_menu"` `android:layout_gravity=``"right"` `android:layout_height=``"fill_parent"` `android:layout_width=``"150dp"` `android:paddingright=``"30dp"` `android:scrollbars=``"none"``&gt;`
        </div>
        
        <div class="line number15 index14 alt2">
          `        ``&lt;linearlayout android:gravity=``"right"` `android:id=``"@+id/layout_right_menu"` `android:layout_gravity=``"center_vertical"` `android:layout_height=``"wrap_content"` `android:layout_width=``"wrap_content"` `android:orientation=``"vertical"``&gt;`
        </div>
        
        <div class="line number16 index15 alt1">
        </div>
        
        <div class="line number17 index16 alt2">
          `        ``&lt;/linearlayout&gt;`
        </div>
        
        <div class="line number18 index17 alt1">
          `    ``&lt;/scrollview&gt;`
        </div>
        
        <div class="line number19 index18 alt2">
        </div>
        
        <div class="line number20 index19 alt1">
          `&lt;/imageview&gt;&lt;/imageview&gt;&lt;/framelayout&gt;`
        </div>
      </div>
    </td>
  </tr>
</table>

布局显示效果

 

![](http://www.2cto.com/uploadfile/Collfiles/20140911/20140911091423127.png)
从布局文件,以及显示效果我们可以看到,它是一个帧布局,第一个ImageView是背景,第二个ImageView是.9的阴影效果的图片(看下面的图),

两个(ScrollView包裹着一个LinerLayout),可以从上面图看到结构分别是左菜单和右菜单

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
        </div>
      </div>
    </td>
  </tr>
</table>

/

 

1.初始化布局以及布局文件分析完毕,2.接下来是设置背景图,初始化view的时候就已经拿到了背景控件,所以设置背景图也是非常好实现的事情了。

 

[?](http://www.2cto.com/kf/201409/332224.html#)
<table border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td class="gutter">
      <div class="line number1 index0 alt2">
        1
      </div>
      
      <div class="line number2 index1 alt1">
        2
      </div>
      
      <div class="line number3 index2 alt2">
        3
      </div>
    </td>
    
    <td class="code">
      <div class="container">
        <div class="line number1 index0 alt2">
          `public` `void` `setBackground(``int` `imageResrouce){`
        </div>
        
        <div class="line number2 index1 alt1">
          `       ``imageViewBackground.setImageResource(imageResrouce);`
        </div>
        
        <div class="line number3 index2 alt2">
          `   ``}`
        </div>
      </div>
    </td>
  </tr>
</table>

3.绑定activity,思考问题:它做了什么?

 

 

[?](http://www.2cto.com/kf/201409/332224.html#)
  <table border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td class="gutter">
        <div class="line number1 index0 alt2">
          1
        </div>
        
        <div class="line number2 index1 alt1">
          2
        </div>
        
        <div class="line number3 index2 alt2">
          3
        </div>
        
        <div class="line number4 index3 alt1">
          4
        </div>
        
        <div class="line number5 index4 alt2">
          5
        </div>
        
        <div class="line number6 index5 alt1">
          6
        </div>
        
        <div class="line number7 index6 alt2">
          7
        </div>
        
        <div class="line number8 index7 alt1">
          8
        </div>
        
        <div class="line number9 index8 alt2">
          9
        </div>
        
        <div class="line number10 index9 alt1">
          10
        </div>
        
        <div class="line number11 index10 alt2">
          11
        </div>
      </td>
      
      <td class="code">
        <div class="container">
          <div class="line number1 index0 alt2">
            `/**`
          </div>
          
          <div class="line number2 index1 alt1">
            `  ``* use the method to set up the activity which residemenu need to show;`
          </div>
          
          <div class="line number3 index2 alt2">
            `  ``*`
          </div>
          
          <div class="line number4 index3 alt1">
            `  ``* @param activity`
          </div>
          
          <div class="line number5 index4 alt2">
            `  ``*/`
          </div>
          
          <div class="line number6 index5 alt1">
            ` ``public` `void` `attachToActivity(Activity activity){`
          </div>
          
          <div class="line number7 index6 alt2">
            `     ``initValue(activity);`
          </div>
          
          <div class="line number8 index7 alt1">
            `     ``setShadowAdjustScaleXByOrientation();`
          </div>
          
          <div class="line number9 index8 alt2">
            `     ``viewDecor.addView(``this``, ````);`
          </div>
          
          <div class="line number10 index9 alt1">
            `     ``setViewPadding();`
          </div>
          
          <div class="line number11 index10 alt2">
            ` ``}`
          </div>
        </div>
      </td>
    </tr>
  </table>
</div>
原理分析:绑定activity做了4件事情,分别是:





&nbsp;





1.初始化参数:





<div>
  <div id="highlighter_491650" class="syntaxhighlighter  java">
    <div class="toolbar">
      [?](http://www.2cto.com/kf/201409/332224.html#)
    </div>
    
    <table border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td class="gutter">
          <div class="line number1 index0 alt2">
            1
          </div>
          
          <div class="line number2 index1 alt1">
            2
          </div>
          
          <div class="line number3 index2 alt2">
            3
          </div>
          
          <div class="line number4 index3 alt1">
            4
          </div>
          
          <div class="line number5 index4 alt2">
            5
          </div>
          
          <div class="line number6 index5 alt1">
            6
          </div>
          
          <div class="line number7 index6 alt2">
            7
          </div>
          
          <div class="line number8 index7 alt1">
            8
          </div>
          
          <div class="line number9 index8 alt2">
            9
          </div>
          
          <div class="line number10 index9 alt1">
            10
          </div>
          
          <div class="line number11 index10 alt2">
            11
          </div>
          
          <div class="line number12 index11 alt1">
            12
          </div>
          
          <div class="line number13 index12 alt2">
            13
          </div>
          
          <div class="line number14 index13 alt1">
            14
          </div>
          
          <div class="line number15 index14 alt2">
            15
          </div>
          
          <div class="line number16 index15 alt1">
            16
          </div>
          
          <div class="line number17 index16 alt2">
            17
          </div>
        </td>
        
        <td class="code">
          <div class="container">
            <div class="line number1 index0 alt2">
              `private` `void` `initValue(Activity activity){`
            </div>
            
            <div class="line number2 index1 alt1">
              `    ``this``.activity   = activity;`
            </div>
            
            <div class="line number3 index2 alt2">
              `    ``leftMenuItems   = ``new` `ArrayList&lt;residemenuitem&gt;();`
            </div>
            
            <div class="line number4 index3 alt1">
              `    ``rightMenuItems  = ``new` `ArrayList&lt;residemenuitem&gt;();`
            </div>
            
            <div class="line number5 index4 alt2">
              `    ``ignoredViews    = ``new` `ArrayList&lt;view&gt;();`
            </div>
            
            <div class="line number6 index5 alt1">
              `    ``viewDecor = (ViewGroup) activity.getWindow().getDecorView();`
            </div>
            
            <div class="line number7 index6 alt2">
              `    ``viewActivity = ``new` `TouchDisableView(``this``.activity);`
            </div>
            
            <div class="line number8 index7 alt1">
            </div>
            
            <div class="line number9 index8 alt2">
              `    ``View mContent   = viewDecor.getChildAt(````);`
            </div>
            
            <div class="line number10 index9 alt1">
              `    ``viewDecor.removeViewAt(````);`
            </div>
            
            <div class="line number11 index10 alt2">
              `    ``viewActivity.setContent(mContent);`
            </div>
            
            <div class="line number12 index11 alt1">
              `    ``addView(viewActivity);`
            </div>
            
            <div class="line number13 index12 alt2">
            </div>
            
            <div class="line number14 index13 alt1">
              `    ``ViewGroup parent = (ViewGroup) scrollViewLeftMenu.getParent();`
            </div>
            
            <div class="line number15 index14 alt2">
              `    ``parent.removeView(scrollViewLeftMenu);`
            </div>
            
            <div class="line number16 index15 alt1">
              `    ``parent.removeView(scrollViewRightMenu);`
            </div>
            
            <div class="line number17 index16 alt2">
              `}&lt;/view&gt;&lt;/residemenuitem&gt;&lt;/residemenuitem&gt;`
            </div>
          </div>
        </td>
      </tr>
    </table>
  </div>
</div>



  &nbsp;





  2.正对横竖屏缩放比例进行调整





  <div>
    <div id="highlighter_875164" class="syntaxhighlighter  java">
      <div class="toolbar">
        [?](http://www.2cto.com/kf/201409/332224.html#)
      </div>
      
      <table border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td class="gutter">
            <div class="line number1 index0 alt2">
              1
            </div>
            
            <div class="line number2 index1 alt1">
              2
            </div>
            
            <div class="line number3 index2 alt2">
              3
            </div>
            
            <div class="line number4 index3 alt1">
              4
            </div>
            
            <div class="line number5 index4 alt2">
              5
            </div>
            
            <div class="line number6 index5 alt1">
              6
            </div>
            
            <div class="line number7 index6 alt2">
              7
            </div>
            
            <div class="line number8 index7 alt1">
              8
            </div>
            
            <div class="line number9 index8 alt2">
              9
            </div>
            
            <div class="line number10 index9 alt1">
              10
            </div>
          </td>
          
          <td class="code">
            <div class="container">
              <div class="line number1 index0 alt2">
                `private` `void` `setShadowAdjustScaleXByOrientation(){`
              </div>
              
              <div class="line number2 index1 alt1">
                `      ``int` `orientation = getResources().getConfiguration().orientation;`
              </div>
              
              <div class="line number3 index2 alt2">
                `      ``if` `(orientation == Configuration.ORIENTATION_LANDSCAPE) {`
              </div>
              
              <div class="line number4 index3 alt1">
                `          ``shadowAdjustScaleX = ````.034f;`
              </div>
              
              <div class="line number5 index4 alt2">
                `          ``shadowAdjustScaleY = ````.12f;`
              </div>
              
              <div class="line number6 index5 alt1">
                `      ``} ``else` `if` `(orientation == Configuration.ORIENTATION_PORTRAIT) {`
              </div>
              
              <div class="line number7 index6 alt2">
                `          ``shadowAdjustScaleX = ````.06f;`
              </div>
              
              <div class="line number8 index7 alt1">
                `          ``shadowAdjustScaleY = ````.07f;`
              </div>
              
              <div class="line number9 index8 alt2">
                `      ``}`
              </div>
              
              <div class="line number10 index9 alt1">
                `  ``}`
              </div>
            </div>
          </td>
        </tr>
      </table>
    </div>
  </div>
  
  

    &nbsp;
  

  
  

    3.添加当前view
  

  
  

    <div>
      <div id="highlighter_800309" class="syntaxhighlighter  java">
        <div class="toolbar">
          [?](http://www.2cto.com/kf/201409/332224.html#)
        </div>
        
        <table border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td class="gutter">
              <div class="line number1 index0 alt2">
                1
              </div>
            </td>
            
            <td class="code">
              <div class="container">
                <div class="line number1 index0 alt2">
                  `viewDecor.addView(``this``, ````);`
                </div>
              </div>
            </td>
          </tr>
        </table>
      </div>
    </div>
    
    

      &nbsp;
    

    
    

      4.设置view边距
    

    
    

      <div>
        <div id="highlighter_276247" class="syntaxhighlighter  java">
          <div class="toolbar">
            [?](http://www.2cto.com/kf/201409/332224.html#)
          </div>
          
          <table border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td class="gutter">
                <div class="line number1 index0 alt2">
                  1
                </div>
                
                <div class="line number2 index1 alt1">
                  2
                </div>
                
                <div class="line number3 index2 alt2">
                  3
                </div>
                
                <div class="line number4 index3 alt1">
                  4
                </div>
                
                <div class="line number5 index4 alt2">
                  5
                </div>
                
                <div class="line number6 index5 alt1">
                  6
                </div>
                
                <div class="line number7 index6 alt2">
                  7
                </div>
                
                <div class="line number8 index7 alt1">
                  8
                </div>
                
                <div class="line number9 index8 alt2">
                  9
                </div>
                
                <div class="line number10 index9 alt1">
                  10
                </div>
              </td>
              
              <td class="code">
                <div class="container">
                  <div class="line number1 index0 alt2">
                    `/**`
                  </div>
                  
                  <div class="line number2 index1 alt1">
                    `     ``* we need the call the method before the menu show, because the`
                  </div>
                  
                  <div class="line number3 index2 alt2">
                    `     ``* padding of activity can't get at the moment of onCreateView();`
                  </div>
                  
                  <div class="line number4 index3 alt1">
                    `     ``*/`
                  </div>
                  
                  <div class="line number5 index4 alt2">
                    `    ``private` `void` `setViewPadding(){`
                  </div>
                  
                  <div class="line number6 index5 alt1">
                    `        ``this``.setPadding(viewActivity.getPaddingLeft(),`
                  </div>
                  
                  <div class="line number7 index6 alt2">
                    `                ``viewActivity.getPaddingTop(),`
                  </div>
                  
                  <div class="line number8 index7 alt1">
                    `                ``viewActivity.getPaddingRight(),`
                  </div>
                  
                  <div class="line number9 index8 alt2">
                    `                ``viewActivity.getPaddingBottom());`
                  </div>
                  
                  <div class="line number10 index9 alt1">
                    `    ``}`
                  </div>
                </div>
              </td>
            </tr>
          </table>
        </div>
      </div>
      
      

        4.设置监听,思考问题:它什么时候调用监听,原理分析:动画监听开始执行动画掉哦那个openMenu动画结束调用closeMenu,从此我们可以想到,但它调用openMenu(int direction)和closeMenu()都会设置这个监听。
      

      
      

        &nbsp;
      

      
      

        <div>
          <div id="highlighter_50179" class="syntaxhighlighter  java">
            <div class="toolbar">
              [?](http://www.2cto.com/kf/201409/332224.html#)
            </div>
            
            <table border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td class="gutter">
                  <div class="line number1 index0 alt2">
                    1
                  </div>
                  
                  <div class="line number2 index1 alt1">
                    2
                  </div>
                  
                  <div class="line number3 index2 alt2">
                    3
                  </div>
                  
                  <div class="line number4 index3 alt1">
                    4
                  </div>
                  
                  <div class="line number5 index4 alt2">
                    5
                  </div>
                  
                  <div class="line number6 index5 alt1">
                    6
                  </div>
                  
                  <div class="line number7 index6 alt2">
                    7
                  </div>
                  
                  <div class="line number8 index7 alt1">
                    8
                  </div>
                  
                  <div class="line number9 index8 alt2">
                    9
                  </div>
                  
                  <div class="line number10 index9 alt1">
                    10
                  </div>
                  
                  <div class="line number11 index10 alt2">
                    11
                  </div>
                  
                  <div class="line number12 index11 alt1">
                    12
                  </div>
                  
                  <div class="line number13 index12 alt2">
                    13
                  </div>
                  
                  <div class="line number14 index13 alt1">
                    14
                  </div>
                  
                  <div class="line number15 index14 alt2">
                    15
                  </div>
                  
                  <div class="line number16 index15 alt1">
                    16
                  </div>
                  
                  <div class="line number17 index16 alt2">
                    17
                  </div>
                  
                  <div class="line number18 index17 alt1">
                    18
                  </div>
                  
                  <div class="line number19 index18 alt2">
                    19
                  </div>
                  
                  <div class="line number20 index19 alt1">
                    20
                  </div>
                  
                  <div class="line number21 index20 alt2">
                    21
                  </div>
                  
                  <div class="line number22 index21 alt1">
                    22
                  </div>
                  
                  <div class="line number23 index22 alt2">
                    23
                  </div>
                  
                  <div class="line number24 index23 alt1">
                    24
                  </div>
                  
                  <div class="line number25 index24 alt2">
                    25
                  </div>
                  
                  <div class="line number26 index25 alt1">
                    26
                  </div>
                  
                  <div class="line number27 index26 alt2">
                    27
                  </div>
                  
                  <div class="line number28 index27 alt1">
                    28
                  </div>
                  
                  <div class="line number29 index28 alt2">
                    29
                  </div>
                  
                  <div class="line number30 index29 alt1">
                    30
                  </div>
                  
                  <div class="line number31 index30 alt2">
                    31
                  </div>
                  
                  <div class="line number32 index31 alt1">
                    32
                  </div>
                  
                  <div class="line number33 index32 alt2">
                    33
                  </div>
                  
                  <div class="line number34 index33 alt1">
                    34
                  </div>
                  
                  <div class="line number35 index34 alt2">
                    35
                  </div>
                </td>
                
                <td class="code">
                  <div class="container">
                    <div class="line number1 index0 alt2">
                      `private` `Animator.AnimatorListener animationListener = ``new` `Animator.AnimatorListener() {`
                    </div>
                    
                    <div class="line number2 index1 alt1">
                      `        ``@Override`
                    </div>
                    
                    <div class="line number3 index2 alt2">
                      `        ``public` `void` `onAnimationStart(Animator animation) {`
                    </div>
                    
                    <div class="line number4 index3 alt1">
                      `            ``if` `(isOpened()){`
                    </div>
                    
                    <div class="line number5 index4 alt2">
                      `                ``showScrollViewMenu();`
                    </div>
                    
                    <div class="line number6 index5 alt1">
                      `                ``if` `(menuListener != ``null``)`
                    </div>
                    
                    <div class="line number7 index6 alt2">
                      `                    ``menuListener.openMenu();`
                    </div>
                    
                    <div class="line number8 index7 alt1">
                      `            ``}`
                    </div>
                    
                    <div class="line number9 index8 alt2">
                      `        ``}`
                    </div>
                    
                    <div class="line number10 index9 alt1">
                    </div>
                    
                    <div class="line number11 index10 alt2">
                      `        ``@Override`
                    </div>
                    
                    <div class="line number12 index11 alt1">
                      `        ``public` `void` `onAnimationEnd(Animator animation) {`
                    </div>
                    
                    <div class="line number13 index12 alt2">
                      `            ``// reset the view;`
                    </div>
                    
                    <div class="line number14 index13 alt1">
                      `            ``if``(isOpened()){`
                    </div>
                    
                    <div class="line number15 index14 alt2">
                      `                ``viewActivity.setTouchDisable(``true``);`
                    </div>
                    
                    <div class="line number16 index15 alt1">
                      `                ``viewActivity.setOnClickListener(viewActivityOnClickListener);`
                    </div>
                    
                    <div class="line number17 index16 alt2">
                      `            ``}``else``{`
                    </div>
                    
                    <div class="line number18 index17 alt1">
                      `                ``viewActivity.setTouchDisable(``false``);`
                    </div>
                    
                    <div class="line number19 index18 alt2">
                      `                ``viewActivity.setOnClickListener(``null``);`
                    </div>
                    
                    <div class="line number20 index19 alt1">
                      `                ``hideScrollViewMenu();`
                    </div>
                    
                    <div class="line number21 index20 alt2">
                      `                ``if` `(menuListener != ``null``)`
                    </div>
                    
                    <div class="line number22 index21 alt1">
                      `                    ``menuListener.closeMenu();`
                    </div>
                    
                    <div class="line number23 index22 alt2">
                      `            ``}`
                    </div>
                    
                    <div class="line number24 index23 alt1">
                      `        ``}`
                    </div>
                    
                    <div class="line number25 index24 alt2">
                    </div>
                    
                    <div class="line number26 index25 alt1">
                      `        ``@Override`
                    </div>
                    
                    <div class="line number27 index26 alt2">
                      `        ``public` `void` `onAnimationCancel(Animator animation) {`
                    </div>
                    
                    <div class="line number28 index27 alt1">
                    </div>
                    
                    <div class="line number29 index28 alt2">
                      `        ``}`
                    </div>
                    
                    <div class="line number30 index29 alt1">
                    </div>
                    
                    <div class="line number31 index30 alt2">
                      `        ``@Override`
                    </div>
                    
                    <div class="line number32 index31 alt1">
                      `        ``public` `void` `onAnimationRepeat(Animator animation) {`
                    </div>
                    
                    <div class="line number33 index32 alt2">
                    </div>
                    
                    <div class="line number34 index33 alt1">
                      `        ``}`
                    </div>
                    
                    <div class="line number35 index34 alt2">
                      `    ``};`
                    </div>
                  </div>
                </td>
              </tr>
            </table>
          </div>
        </div>
        
        

          5.设置内容缩放比例(0.1~1f),细心的同学会发现在当缩完成后还可以在往里面拉到更小,有种弹性的感觉,挺有趣的。但是有些人的需求不想要有这种弹性效果,我们可以通过修改源码修改这个弹性效果,找到getTargetScale这个方法,修改下面0.5这个数值。使用时设置了0.6的缩放比例,默认下面的弹性参数是0.5所以我们当缩完成后还可以在往里面拉0.1的比例。
        

        
        

          &nbsp;
        

        
        

          <div>
            <div id="highlighter_849856" class="syntaxhighlighter  java">
              <div class="toolbar">
                [?](http://www.2cto.com/kf/201409/332224.html#)
              </div>
              
              <table border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td class="gutter">
                    <div class="line number1 index0 alt2">
                      1
                    </div>
                    
                    <div class="line number2 index1 alt1">
                      2
                    </div>
                    
                    <div class="line number3 index2 alt2">
                      3
                    </div>
                    
                    <div class="line number4 index3 alt1">
                      4
                    </div>
                    
                    <div class="line number5 index4 alt2">
                      5
                    </div>
                    
                    <div class="line number6 index5 alt1">
                      6
                    </div>
                    
                    <div class="line number7 index6 alt2">
                      7
                    </div>
                    
                    <div class="line number8 index7 alt1">
                      8
                    </div>
                    
                    <div class="line number9 index8 alt2">
                      9
                    </div>
                  </td>
                  
                  <td class="code">
                    <div class="container">
                      <div class="line number1 index0 alt2">
                        `private` `float` `getTargetScale(``float` `currentRawX){`
                      </div>
                      
                      <div class="line number2 index1 alt1">
                        `    ``float` `scaleFloatX = ((currentRawX - lastRawX) / getScreenWidth()) * ````.75f;`
                      </div>
                      
                      <div class="line number3 index2 alt2">
                        `    ``scaleFloatX = scaleDirection == DIRECTION_RIGHT ? - scaleFloatX : scaleFloatX;`
                      </div>
                      
                      <div class="line number4 index3 alt1">
                      </div>
                      
                      <div class="line number5 index4 alt2">
                        `    ``float` `targetScale = ViewHelper.getScaleX(viewActivity) - scaleFloatX;`
                      </div>
                      
                      <div class="line number6 index5 alt1">
                        `    ``targetScale = targetScale &gt; ``1``.0f ? ``1``.0f : targetScale;`
                      </div>
                      
                      <div class="line number7 index6 alt2">
                        `    ``targetScale = targetScale &lt; ````.5f ? ````.5f : targetScale;`
                      </div>
                      
                      <div class="line number8 index7 alt1">
                        `    ``return` `targetScale;`
                      </div>
                      
                      <div class="line number9 index8 alt2">
                        `}`
                      </div>
                    </div>
                  </td>
                </tr>
              </table>
            </div>
          </div>
          
          

            &nbsp;
          

          
          

            默认缩放比例:
          

          
          

            <div>
              <div id="highlighter_387269" class="syntaxhighlighter  java">
                <div class="toolbar">
                  [?](http://www.2cto.com/kf/201409/332224.html#)
                </div>
                
                <table border="0" cellspacing="0" cellpadding="0">
                  <tr>
                    <td class="gutter">
                      <div class="line number1 index0 alt2">
                        1
                      </div>
                      
                      <div class="line number2 index1 alt1">
                        2
                      </div>
                    </td>
                    
                    <td class="code">
                      <div class="container">
                        <div class="line number1 index0 alt2">
                          `//valid scale factor is between 0.0f and 1.0f.`
                        </div>
                        
                        <div class="line number2 index1 alt1">
                          `   ``private` `float` `mScaleValue = ````.5f;`
                        </div>
                      </div>
                    </td>
                  </tr>
                </table>
              </div>
            </div>
            
            <div>
              <div id="highlighter_786345" class="syntaxhighlighter  java">
                <div class="toolbar">
                  [?](http://www.2cto.com/kf/201409/332224.html#)
                </div>
                
                <table border="0" cellspacing="0" cellpadding="0">
                  <tr>
                    <td class="gutter">
                      <div class="line number1 index0 alt2">
                        1
                      </div>
                    </td>
                    
                    <td class="code">
                      <div class="container">
                        <div class="line number1 index0 alt2">
                          `AnimatorSet scaleDown_activity = buildScaleDownAnimation(viewActivity, mScaleValue, mScaleValue);`
                        </div>
                      </div>
                    </td>
                  </tr>
                </table>
              </div>
            </div>
            
            <div>
              <div id="highlighter_737569" class="syntaxhighlighter  java">
                <div class="toolbar">
                  [?](http://www.2cto.com/kf/201409/332224.html#)
                </div>
                
                <table border="0" cellspacing="0" cellpadding="0">
                  <tr>
                    <td class="gutter">
                      <div class="line number1 index0 alt2">
                        1
                      </div>
                      
                      <div class="line number2 index1 alt1">
                        2
                      </div>
                      
                      <div class="line number3 index2 alt2">
                        3
                      </div>
                      
                      <div class="line number4 index3 alt1">
                        4
                      </div>
                      
                      <div class="line number5 index4 alt2">
                        5
                      </div>
                      
                      <div class="line number6 index5 alt1">
                        6
                      </div>
                      
                      <div class="line number7 index6 alt2">
                        7
                      </div>
                      
                      <div class="line number8 index7 alt1">
                        8
                      </div>
                      
                      <div class="line number9 index8 alt2">
                        9
                      </div>
                      
                      <div class="line number10 index9 alt1">
                        10
                      </div>
                      
                      <div class="line number11 index10 alt2">
                        11
                      </div>
                      
                      <div class="line number12 index11 alt1">
                        12
                      </div>
                      
                      <div class="line number13 index12 alt2">
                        13
                      </div>
                      
                      <div class="line number14 index13 alt1">
                        14
                      </div>
                      
                      <div class="line number15 index14 alt2">
                        15
                      </div>
                      
                      <div class="line number16 index15 alt1">
                        16
                      </div>
                      
                      <div class="line number17 index16 alt2">
                        17
                      </div>
                      
                      <div class="line number18 index17 alt1">
                        18
                      </div>
                      
                      <div class="line number19 index18 alt2">
                        19
                      </div>
                      
                      <div class="line number20 index19 alt1">
                        20
                      </div>
                      
                      <div class="line number21 index20 alt2">
                        21
                      </div>
                    </td>
                    
                    <td class="code">
                      <div class="container">
                        <div class="line number1 index0 alt2">
                          `/**`
                        </div>
                        
                        <div class="line number2 index1 alt1">
                          `     ``* a helper method to build scale down animation;`
                        </div>
                        
                        <div class="line number3 index2 alt2">
                          `     ``*`
                        </div>
                        
                        <div class="line number4 index3 alt1">
                          `     ``* @param target`
                        </div>
                        
                        <div class="line number5 index4 alt2">
                          `     ``* @param targetScaleX`
                        </div>
                        
                        <div class="line number6 index5 alt1">
                          `     ``* @param targetScaleY`
                        </div>
                        
                        <div class="line number7 index6 alt2">
                          `     ``* @return`
                        </div>
                        
                        <div class="line number8 index7 alt1">
                          `     ``*/`
                        </div>
                        
                        <div class="line number9 index8 alt2">
                          `    ``private` `AnimatorSet buildScaleDownAnimation(View target,``float` `targetScaleX,``float` `targetScaleY){`
                        </div>
                        
                        <div class="line number10 index9 alt1">
                        </div>
                        
                        <div class="line number11 index10 alt2">
                          `        ``AnimatorSet scaleDown = ``new` `AnimatorSet();`
                        </div>
                        
                        <div class="line number12 index11 alt1">
                          `        ``scaleDown.playTogether(`
                        </div>
                        
                        <div class="line number13 index12 alt2">
                          `                ``ObjectAnimator.ofFloat(target, scaleX, targetScaleX),`
                        </div>
                        
                        <div class="line number14 index13 alt1">
                          `                ``ObjectAnimator.ofFloat(target, scaleY, targetScaleY)`
                        </div>
                        
                        <div class="line number15 index14 alt2">
                          `        ``);`
                        </div>
                        
                        <div class="line number16 index15 alt1">
                        </div>
                        
                        <div class="line number17 index16 alt2">
                          `        ``scaleDown.setInterpolator(AnimationUtils.loadInterpolator(activity,`
                        </div>
                        
                        <div class="line number18 index17 alt1">
                          `                ``android.R.anim.decelerate_interpolator));`
                        </div>
                        
                        <div class="line number19 index18 alt2">
                          `        ``scaleDown.setDuration(``250``);`
                        </div>
                        
                        <div class="line number20 index19 alt1">
                          `        ``return` `scaleDown;`
                        </div>
                        
                        <div class="line number21 index20 alt2">
                          `    ``}`
                        </div>
                      </div>
                    </td>
                  </tr>
                </table>
              </div>
            </div>
            
            

              6.创建子菜单,看下子菜单的构造,我们通过上面的学习,原理分析:我们可以猜测到,无非就是加载布局设置内容
            

            
            

              &nbsp;
            

            
            

              <div>
                <div id="highlighter_727811" class="syntaxhighlighter  java">
                  <div class="toolbar">
                    [?](http://www.2cto.com/kf/201409/332224.html#)
                  </div>
                  
                  <table border="0" cellspacing="0" cellpadding="0">
                    <tr>
                      <td class="gutter">
                        <div class="line number1 index0 alt2">
                          1
                        </div>
                        
                        <div class="line number2 index1 alt1">
                          2
                        </div>
                        
                        <div class="line number3 index2 alt2">
                          3
                        </div>
                        
                        <div class="line number4 index3 alt1">
                          4
                        </div>
                        
                        <div class="line number5 index4 alt2">
                          5
                        </div>
                        
                        <div class="line number6 index5 alt1">
                          6
                        </div>
                        
                        <div class="line number7 index6 alt2">
                          7
                        </div>
                        
                        <div class="line number8 index7 alt1">
                          8
                        </div>
                        
                        <div class="line number9 index8 alt2">
                          9
                        </div>
                        
                        <div class="line number10 index9 alt1">
                          10
                        </div>
                        
                        <div class="line number11 index10 alt2">
                          11
                        </div>
                        
                        <div class="line number12 index11 alt1">
                          12
                        </div>
                        
                        <div class="line number13 index12 alt2">
                          13
                        </div>
                      </td>
                      
                      <td class="code">
                        <div class="container">
                          <div class="line number1 index0 alt2">
                            `public` `ResideMenuItem(Context context, ``int` `icon, String title) {`
                          </div>
                          
                          <div class="line number2 index1 alt1">
                            `        ``super``(context);`
                          </div>
                          
                          <div class="line number3 index2 alt2">
                            `        ``initViews(context);`
                          </div>
                          
                          <div class="line number4 index3 alt1">
                            `        ``iv_icon.setImageResource(icon);`
                          </div>
                          
                          <div class="line number5 index4 alt2">
                            `        ``tv_title.setText(title);`
                          </div>
                          
                          <div class="line number6 index5 alt1">
                            `    ``}`
                          </div>
                          
                          <div class="line number7 index6 alt2">
                          </div>
                          
                          <div class="line number8 index7 alt1">
                            `    ``private` `void` `initViews(Context context){`
                          </div>
                          
                          <div class="line number9 index8 alt2">
                            `        ``LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);`
                          </div>
                          
                          <div class="line number10 index9 alt1">
                            `        ``inflater.inflate(R.layout.residemenu_item, ``this``);`
                          </div>
                          
                          <div class="line number11 index10 alt2">
                            `        ``iv_icon = (ImageView) findViewById(R.id.iv_icon);`
                          </div>
                          
                          <div class="line number12 index11 alt1">
                            `        ``tv_title = (TextView) findViewById(R.id.tv_title);`
                          </div>
                          
                          <div class="line number13 index12 alt2">
                            `    ``}`
                          </div>
                        </div>
                      </td>
                    </tr>
                  </table>
                </div>
              </div>
              
              

                布局文件:
              

              
              

                &nbsp;
              

              
              

                <div>
                  <div id="highlighter_266937" class="syntaxhighlighter  java">
                    <div class="toolbar">
                      [?](http://www.2cto.com/kf/201409/332224.html#)
                    </div>
                    
                    <table border="0" cellspacing="0" cellpadding="0">
                      <tr>
                        <td class="gutter">
                          <div class="line number1 index0 alt2">
                            1
                          </div>
                          
                          <div class="line number2 index1 alt1">
                            2
                          </div>
                          
                          <div class="line number3 index2 alt2">
                            3
                          </div>
                          
                          <div class="line number4 index3 alt1">
                            4
                          </div>
                          
                          <div class="line number5 index4 alt2">
                            5
                          </div>
                          
                          <div class="line number6 index5 alt1">
                            6
                          </div>
                          
                          <div class="line number7 index6 alt2">
                            7
                          </div>
                          
                          <div class="line number8 index7 alt1">
                            8
                          </div>
                          
                          <div class="line number9 index8 alt2">
                            9
                          </div>
                        </td>
                        
                        <td class="code">
                          <div class="container">
                            <div class="line number1 index0 alt2">
                              `&lt;!--?xml version=``1.0` `encoding=utf-``8``?--&gt;`
                            </div>
                            
                            <div class="line number2 index1 alt1">
                            </div>
                            
                            <div class="line number3 index2 alt2">
                              `&lt;linearlayout android:gravity=``"center_vertical"` `android:layout_height=``"wrap_content"` `android:layout_width=``"match_parent"` `android:orientation=``"horizontal"` `android:paddingtop=``"30dp"` `xmlns:android=``"&lt;a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android&lt;/a>"``&gt;`
                            </div>
                            
                            <div class="line number4 index3 alt1">
                            </div>
                            
                            <div class="line number5 index4 alt2">
                              `    ``&lt;imageview android:id=``"@+id/iv_icon/"` `android:layout_height=``"30dp"` `android:layout_width=``"30dp"` `android:scaletype=``"centerCrop"``&gt;`
                            </div>
                            
                            <div class="line number6 index5 alt1">
                            </div>
                            
                            <div class="line number7 index6 alt2">
                              `    ``&lt;textview android:id=``"@+id/tv_title/"` `android:layout_height=``"wrap_content"` `android:layout_marginleft=``"10dp"` `android:layout_width=``"match_parent"` `android:textcolor=``"@android:color/white"` `android:textsize=``"18sp"``&gt;`
                            </div>
                            
                            <div class="line number8 index7 alt1">
                            </div>
                            
                            <div class="line number9 index8 alt2">
                              `&lt;/textview&gt;&lt;/imageview&gt;&lt;/linearlayout&gt;`
                            </div>
                          </div>
                        </td>
                      </tr>
                    </table>
                  </div>
                </div>
                
                

                  &nbsp;
                

                
                

                  显示效果图:
                

                
                

                  ![\](http://www.2cto.com/uploadfile/Collfiles/20140911/20140911091424130.png)
                

                
                

                  7.子菜单添加到侧换菜单中(可以看到它是通过常量来控制子菜单的添加位置)原理分析:根据不同的常量来区分添加不同菜单的子菜单
                

                
                

                  <div>
                    <div id="highlighter_947418" class="syntaxhighlighter  java">
                      <div class="toolbar">
                        [?](http://www.2cto.com/kf/201409/332224.html#)
                      </div>
                      
                      <table border="0" cellspacing="0" cellpadding="0">
                        <tr>
                          <td class="gutter">
                            <div class="line number1 index0 alt2">
                              1
                            </div>
                            
                            <div class="line number2 index1 alt1">
                              2
                            </div>
                            
                            <div class="line number3 index2 alt2">
                              3
                            </div>
                            
                            <div class="line number4 index3 alt1">
                              4
                            </div>
                            
                            <div class="line number5 index4 alt2">
                              5
                            </div>
                            
                            <div class="line number6 index5 alt1">
                              6
                            </div>
                            
                            <div class="line number7 index6 alt2">
                              7
                            </div>
                            
                            <div class="line number8 index7 alt1">
                              8
                            </div>
                            
                            <div class="line number9 index8 alt2">
                              9
                            </div>
                            
                            <div class="line number10 index9 alt1">
                              10
                            </div>
                            
                            <div class="line number11 index10 alt2">
                              11
                            </div>
                            
                            <div class="line number12 index11 alt1">
                              12
                            </div>
                            
                            <div class="line number13 index12 alt2">
                              13
                            </div>
                            
                            <div class="line number14 index13 alt1">
                              14
                            </div>
                            
                            <div class="line number15 index14 alt2">
                              15
                            </div>
                          </td>
                          
                          <td class="code">
                            <div class="container">
                              <div class="line number1 index0 alt2">
                                `/**`
                              </div>
                              
                              <div class="line number2 index1 alt1">
                                `    ``* add a single items;`
                              </div>
                              
                              <div class="line number3 index2 alt2">
                                `    ``*`
                              </div>
                              
                              <div class="line number4 index3 alt1">
                                `    ``* @param menuItem`
                              </div>
                              
                              <div class="line number5 index4 alt2">
                                `    ``* @param direction`
                              </div>
                              
                              <div class="line number6 index5 alt1">
                                `    ``*/`
                              </div>
                              
                              <div class="line number7 index6 alt2">
                                `   ``public` `void` `addMenuItem(ResideMenuItem menuItem, ``int` `direction){`
                              </div>
                              
                              <div class="line number8 index7 alt1">
                                `       ``if` `(direction == DIRECTION_LEFT){`
                              </div>
                              
                              <div class="line number9 index8 alt2">
                                `           ``this``.leftMenuItems.add(menuItem);`
                              </div>
                              
                              <div class="line number10 index9 alt1">
                                `           ``layoutLeftMenu.addView(menuItem);`
                              </div>
                              
                              <div class="line number11 index10 alt2">
                                `       ``}``else``{`
                              </div>
                              
                              <div class="line number12 index11 alt1">
                                `           ``this``.rightMenuItems.add(menuItem);`
                              </div>
                              
                              <div class="line number13 index12 alt2">
                                `           ``layoutRightMenu.addView(menuItem);`
                              </div>
                              
                              <div class="line number14 index13 alt1">
                                `       ``}`
                              </div>
                              
                              <div class="line number15 index14 alt2">
                                `   ``}`
                              </div>
                            </div>
                          </td>
                        </tr>
                      </table>
                    </div>
                  </div>
                  
                  

                    8.设置title按钮的点击事件,设置左右菜单的开关,原理分析:先设置了缩放方向然后在设置动画,正如我们上面想的一样还设置了动画监听。
                  

                  
                  

                    &nbsp;
                  

                  
                  

                    <div>
                      <div id="highlighter_968606" class="syntaxhighlighter  java">
                        <div class="toolbar">
                          [?](http://www.2cto.com/kf/201409/332224.html#)
                        </div>
                        
                        <table border="0" cellspacing="0" cellpadding="0">
                          <tr>
                            <td class="gutter">
                              <div class="line number1 index0 alt2">
                                1
                              </div>
                              
                              <div class="line number2 index1 alt1">
                                2
                              </div>
                              
                              <div class="line number3 index2 alt2">
                                3
                              </div>
                              
                              <div class="line number4 index3 alt1">
                                4
                              </div>
                              
                              <div class="line number5 index4 alt2">
                                5
                              </div>
                              
                              <div class="line number6 index5 alt1">
                                6
                              </div>
                              
                              <div class="line number7 index6 alt2">
                                7
                              </div>
                              
                              <div class="line number8 index7 alt1">
                                8
                              </div>
                              
                              <div class="line number9 index8 alt2">
                                9
                              </div>
                              
                              <div class="line number10 index9 alt1">
                                10
                              </div>
                              
                              <div class="line number11 index10 alt2">
                                11
                              </div>
                              
                              <div class="line number12 index11 alt1">
                                12
                              </div>
                              
                              <div class="line number13 index12 alt2">
                                13
                              </div>
                              
                              <div class="line number14 index13 alt1">
                                14
                              </div>
                              
                              <div class="line number15 index14 alt2">
                                15
                              </div>
                              
                              <div class="line number16 index15 alt1">
                                16
                              </div>
                              
                              <div class="line number17 index16 alt2">
                                17
                              </div>
                            </td>
                            
                            <td class="code">
                              <div class="container">
                                <div class="line number1 index0 alt2">
                                  `/**`
                                </div>
                                
                                <div class="line number2 index1 alt1">
                                  ` ``* show the reside menu;`
                                </div>
                                
                                <div class="line number3 index2 alt2">
                                  ` ``*/`
                                </div>
                                
                                <div class="line number4 index3 alt1">
                                  `public` `void` `openMenu(``int` `direction){`
                                </div>
                                
                                <div class="line number5 index4 alt2">
                                </div>
                                
                                <div class="line number6 index5 alt1">
                                  `    ``setScaleDirection(direction);`
                                </div>
                                
                                <div class="line number7 index6 alt2">
                                </div>
                                
                                <div class="line number8 index7 alt1">
                                  `    ``isOpened = ``true``;`
                                </div>
                                
                                <div class="line number9 index8 alt2">
                                  `    ``AnimatorSet scaleDown_activity = buildScaleDownAnimation(viewActivity, mScaleValue, mScaleValue);`
                                </div>
                                
                                <div class="line number10 index9 alt1">
                                  `    ``AnimatorSet scaleDown_shadow = buildScaleDownAnimation(imageViewShadow,`
                                </div>
                                
                                <div class="line number11 index10 alt2">
                                  `            ``mScaleValue + shadowAdjustScaleX, mScaleValue + shadowAdjustScaleY);`
                                </div>
                                
                                <div class="line number12 index11 alt1">
                                  `    ``AnimatorSet alpha_menu = buildMenuAnimation(scrollViewMenu, ``1``.0f);`
                                </div>
                                
                                <div class="line number13 index12 alt2">
                                  `    ``scaleDown_shadow.addListener(animationListener);`
                                </div>
                                
                                <div class="line number14 index13 alt1">
                                  `    ``scaleDown_activity.playTogether(scaleDown_shadow);`
                                </div>
                                
                                <div class="line number15 index14 alt2">
                                  `    ``scaleDown_activity.playTogether(alpha_menu);`
                                </div>
                                
                                <div class="line number16 index15 alt1">
                                  `    ``scaleDown_activity.start();`
                                </div>
                                
                                <div class="line number17 index16 alt2">
                                  `}`
                                </div>
                              </div>
                            </td>
                          </tr>
                        </table>
                      </div>
                    </div>
                    
                    

                      设置缩放方向及计算x,y轴位置。
                    

                    
                    

                      &nbsp;
                    

                    
                    

                      <div>
                        <div id="highlighter_444663" class="syntaxhighlighter  java">
                          <div class="toolbar">
                            [?](http://www.2cto.com/kf/201409/332224.html#)
                          </div>
                          
                          <table border="0" cellspacing="0" cellpadding="0">
                            <tr>
                              <td class="gutter">
                                <div class="line number1 index0 alt2">
                                  1
                                </div>
                                
                                <div class="line number2 index1 alt1">
                                  2
                                </div>
                                
                                <div class="line number3 index2 alt2">
                                  3
                                </div>
                                
                                <div class="line number4 index3 alt1">
                                  4
                                </div>
                                
                                <div class="line number5 index4 alt2">
                                  5
                                </div>
                                
                                <div class="line number6 index5 alt1">
                                  6
                                </div>
                                
                                <div class="line number7 index6 alt2">
                                  7
                                </div>
                                
                                <div class="line number8 index7 alt1">
                                  8
                                </div>
                                
                                <div class="line number9 index8 alt2">
                                  9
                                </div>
                                
                                <div class="line number10 index9 alt1">
                                  10
                                </div>
                                
                                <div class="line number11 index10 alt2">
                                  11
                                </div>
                                
                                <div class="line number12 index11 alt1">
                                  12
                                </div>
                                
                                <div class="line number13 index12 alt2">
                                  13
                                </div>
                                
                                <div class="line number14 index13 alt1">
                                  14
                                </div>
                                
                                <div class="line number15 index14 alt2">
                                  15
                                </div>
                                
                                <div class="line number16 index15 alt1">
                                  16
                                </div>
                                
                                <div class="line number17 index16 alt2">
                                  17
                                </div>
                                
                                <div class="line number18 index17 alt1">
                                  18
                                </div>
                                
                                <div class="line number19 index18 alt2">
                                  19
                                </div>
                                
                                <div class="line number20 index19 alt1">
                                  20
                                </div>
                              </td>
                              
                              <td class="code">
                                <div class="container">
                                  <div class="line number1 index0 alt2">
                                    `private` `void` `setScaleDirection(``int` `direction){`
                                  </div>
                                  
                                  <div class="line number2 index1 alt1">
                                  </div>
                                  
                                  <div class="line number3 index2 alt2">
                                    `    ``int` `screenWidth = getScreenWidth();`
                                  </div>
                                  
                                  <div class="line number4 index3 alt1">
                                    `    ``float` `pivotX;`
                                  </div>
                                  
                                  <div class="line number5 index4 alt2">
                                    `    ``float` `pivotY = getScreenHeight() * ````.5f;`
                                  </div>
                                  
                                  <div class="line number6 index5 alt1">
                                  </div>
                                  
                                  <div class="line number7 index6 alt2">
                                    `    ``if` `(direction == DIRECTION_LEFT){`
                                  </div>
                                  
                                  <div class="line number8 index7 alt1">
                                    `        ``scrollViewMenu = scrollViewLeftMenu;`
                                  </div>
                                  
                                  <div class="line number9 index8 alt2">
                                    `        ``pivotX  = screenWidth * ``1``.5f;`
                                  </div>
                                  
                                  <div class="line number10 index9 alt1">
                                    `    ``}``else``{`
                                  </div>
                                  
                                  <div class="line number11 index10 alt2">
                                    `        ``scrollViewMenu = scrollViewRightMenu;`
                                  </div>
                                  
                                  <div class="line number12 index11 alt1">
                                    `        ``pivotX  = screenWidth * -````.5f;`
                                  </div>
                                  
                                  <div class="line number13 index12 alt2">
                                    `    ``}`
                                  </div>
                                  
                                  <div class="line number14 index13 alt1">
                                  </div>
                                  
                                  <div class="line number15 index14 alt2">
                                    `    ``ViewHelper.setPivotX(viewActivity, pivotX);`
                                  </div>
                                  
                                  <div class="line number16 index15 alt1">
                                    `    ``ViewHelper.setPivotY(viewActivity, pivotY);`
                                  </div>
                                  
                                  <div class="line number17 index16 alt2">
                                    `    ``ViewHelper.setPivotX(imageViewShadow, pivotX);`
                                  </div>
                                  
                                  <div class="line number18 index17 alt1">
                                    `    ``ViewHelper.setPivotY(imageViewShadow, pivotY);`
                                  </div>
                                  
                                  <div class="line number19 index18 alt2">
                                    `    ``scaleDirection = direction;`
                                  </div>
                                  
                                  <div class="line number20 index19 alt1">
                                    `}`
                                  </div>
                                </div>
                              </td>
                            </tr>
                          </table>
                        </div>
                      </div>
                      
                      

                        9.重写dispatchTouchEvent,问题思考:如何到根据手指滑动自动缩放
                      

                      
                      

                        &nbsp;
                      

                      
                      

                        如果还不了解,dispatchTouchEvent这个函数如何调用?什么时候调用?请先看看http://blog.csdn.net/cym492224103/article/details/39179311
                      

                      
                      

                        <div>
                          <div id="highlighter_475966" class="syntaxhighlighter  java">
                            <div class="toolbar">
                              [?](http://www.2cto.com/kf/201409/332224.html#)
                            </div>
                            
                            <table border="0" cellspacing="0" cellpadding="0">
                              <tr>
                                <td class="gutter">
                                  <div class="line number1 index0 alt2">
                                    1
                                  </div>
                                  
                                  <div class="line number2 index1 alt1">
                                    2
                                  </div>
                                  
                                  <div class="line number3 index2 alt2">
                                    3
                                  </div>
                                  
                                  <div class="line number4 index3 alt1">
                                    4
                                  </div>
                                  
                                  <div class="line number5 index4 alt2">
                                    5
                                  </div>
                                  
                                  <div class="line number6 index5 alt1">
                                    6
                                  </div>
                                  
                                  <div class="line number7 index6 alt2">
                                    7
                                  </div>
                                  
                                  <div class="line number8 index7 alt1">
                                    8
                                  </div>
                                  
                                  <div class="line number9 index8 alt2">
                                    9
                                  </div>
                                  
                                  <div class="line number10 index9 alt1">
                                    10
                                  </div>
                                  
                                  <div class="line number11 index10 alt2">
                                    11
                                  </div>
                                  
                                  <div class="line number12 index11 alt1">
                                    12
                                  </div>
                                  
                                  <div class="line number13 index12 alt2">
                                    13
                                  </div>
                                  
                                  <div class="line number14 index13 alt1">
                                    14
                                  </div>
                                  
                                  <div class="line number15 index14 alt2">
                                    15
                                  </div>
                                  
                                  <div class="line number16 index15 alt1">
                                    16
                                  </div>
                                  
                                  <div class="line number17 index16 alt2">
                                    17
                                  </div>
                                  
                                  <div class="line number18 index17 alt1">
                                    18
                                  </div>
                                  
                                  <div class="line number19 index18 alt2">
                                    19
                                  </div>
                                  
                                  <div class="line number20 index19 alt1">
                                    20
                                  </div>
                                  
                                  <div class="line number21 index20 alt2">
                                    21
                                  </div>
                                  
                                  <div class="line number22 index21 alt1">
                                    22
                                  </div>
                                  
                                  <div class="line number23 index22 alt2">
                                    23
                                  </div>
                                  
                                  <div class="line number24 index23 alt1">
                                    24
                                  </div>
                                  
                                  <div class="line number25 index24 alt2">
                                    25
                                  </div>
                                  
                                  <div class="line number26 index25 alt1">
                                    26
                                  </div>
                                  
                                  <div class="line number27 index26 alt2">
                                    27
                                  </div>
                                  
                                  <div class="line number28 index27 alt1">
                                    28
                                  </div>
                                  
                                  <div class="line number29 index28 alt2">
                                    29
                                  </div>
                                  
                                  <div class="line number30 index29 alt1">
                                    30
                                  </div>
                                  
                                  <div class="line number31 index30 alt2">
                                    31
                                  </div>
                                  
                                  <div class="line number32 index31 alt1">
                                    32
                                  </div>
                                  
                                  <div class="line number33 index32 alt2">
                                    33
                                  </div>
                                  
                                  <div class="line number34 index33 alt1">
                                    34
                                  </div>
                                  
                                  <div class="line number35 index34 alt2">
                                    35
                                  </div>
                                  
                                  <div class="line number36 index35 alt1">
                                    36
                                  </div>
                                  
                                  <div class="line number37 index36 alt2">
                                    37
                                  </div>
                                  
                                  <div class="line number38 index37 alt1">
                                    38
                                  </div>
                                  
                                  <div class="line number39 index38 alt2">
                                    39
                                  </div>
                                  
                                  <div class="line number40 index39 alt1">
                                    40
                                  </div>
                                  
                                  <div class="line number41 index40 alt2">
                                    41
                                  </div>
                                  
                                  <div class="line number42 index41 alt1">
                                    42
                                  </div>
                                  
                                  <div class="line number43 index42 alt2">
                                    43
                                  </div>
                                  
                                  <div class="line number44 index43 alt1">
                                    44
                                  </div>
                                  
                                  <div class="line number45 index44 alt2">
                                    45
                                  </div>
                                  
                                  <div class="line number46 index45 alt1">
                                    46
                                  </div>
                                  
                                  <div class="line number47 index46 alt2">
                                    47
                                  </div>
                                  
                                  <div class="line number48 index47 alt1">
                                    48
                                  </div>
                                  
                                  <div class="line number49 index48 alt2">
                                    49
                                  </div>
                                  
                                  <div class="line number50 index49 alt1">
                                    50
                                  </div>
                                  
                                  <div class="line number51 index50 alt2">
                                    51
                                  </div>
                                  
                                  <div class="line number52 index51 alt1">
                                    52
                                  </div>
                                  
                                  <div class="line number53 index52 alt2">
                                    53
                                  </div>
                                  
                                  <div class="line number54 index53 alt1">
                                    54
                                  </div>
                                  
                                  <div class="line number55 index54 alt2">
                                    55
                                  </div>
                                  
                                  <div class="line number56 index55 alt1">
                                    56
                                  </div>
                                  
                                  <div class="line number57 index56 alt2">
                                    57
                                  </div>
                                  
                                  <div class="line number58 index57 alt1">
                                    58
                                  </div>
                                  
                                  <div class="line number59 index58 alt2">
                                    59
                                  </div>
                                  
                                  <div class="line number60 index59 alt1">
                                    60
                                  </div>
                                  
                                  <div class="line number61 index60 alt2">
                                    61
                                  </div>
                                  
                                  <div class="line number62 index61 alt1">
                                    62
                                  </div>
                                  
                                  <div class="line number63 index62 alt2">
                                    63
                                  </div>
                                  
                                  <div class="line number64 index63 alt1">
                                    64
                                  </div>
                                  
                                  <div class="line number65 index64 alt2">
                                    65
                                  </div>
                                  
                                  <div class="line number66 index65 alt1">
                                    66
                                  </div>
                                  
                                  <div class="line number67 index66 alt2">
                                    67
                                  </div>
                                  
                                  <div class="line number68 index67 alt1">
                                    68
                                  </div>
                                  
                                  <div class="line number69 index68 alt2">
                                    69
                                  </div>
                                  
                                  <div class="line number70 index69 alt1">
                                    70
                                  </div>
                                  
                                  <div class="line number71 index70 alt2">
                                    71
                                  </div>
                                  
                                  <div class="line number72 index71 alt1">
                                    72
                                  </div>
                                  
                                  <div class="line number73 index72 alt2">
                                    73
                                  </div>
                                  
                                  <div class="line number74 index73 alt1">
                                    74
                                  </div>
                                  
                                  <div class="line number75 index74 alt2">
                                    75
                                  </div>
                                  
                                  <div class="line number76 index75 alt1">
                                    76
                                  </div>
                                </td>
                                
                                <td class="code">
                                  <div class="container">
                                    <div class="line number1 index0 alt2">
                                      `@Override`
                                    </div>
                                    
                                    <div class="line number2 index1 alt1">
                                      `public` `boolean` `dispatchTouchEvent(MotionEvent ev) {`
                                    </div>
                                    
                                    <div class="line number3 index2 alt2">
                                      `    ``float` `currentActivityScaleX = ViewHelper.getScaleX(viewActivity);`
                                    </div>
                                    
                                    <div class="line number4 index3 alt1">
                                      `    ``if` `(currentActivityScaleX == ``1``.0f)`
                                    </div>
                                    
                                    <div class="line number5 index4 alt2">
                                      `        ``setScaleDirectionByRawX(ev.getRawX());`
                                    </div>
                                    
                                    <div class="line number6 index5 alt1">
                                    </div>
                                    
                                    <div class="line number7 index6 alt2">
                                      `    ``switch` `(ev.getAction()){`
                                    </div>
                                    
                                    <div class="line number8 index7 alt1">
                                      `        ``case` `MotionEvent.ACTION_DOWN:`
                                    </div>
                                    
                                    <div class="line number9 index8 alt2">
                                      `            ``lastActionDownX = ev.getX();`
                                    </div>
                                    
                                    <div class="line number10 index9 alt1">
                                      `            ``lastActionDownY = ev.getY();`
                                    </div>
                                    
                                    <div class="line number11 index10 alt2">
                                      `            ``isInIgnoredView = isInIgnoredView(ev) && !isOpened();`
                                    </div>
                                    
                                    <div class="line number12 index11 alt1">
                                      `            ``pressedState    = PRESSED_DOWN;`
                                    </div>
                                    
                                    <div class="line number13 index12 alt2">
                                      `            ``break``;`
                                    </div>
                                    
                                    <div class="line number14 index13 alt1">
                                    </div>
                                    
                                    <div class="line number15 index14 alt2">
                                      `        ``case` `MotionEvent.ACTION_MOVE:`
                                    </div>
                                    
                                    <div class="line number16 index15 alt1">
                                      `            ``if` `(isInIgnoredView || isInDisableDirection(scaleDirection))`
                                    </div>
                                    
                                    <div class="line number17 index16 alt2">
                                      `                ``break``;`
                                    </div>
                                    
                                    <div class="line number18 index17 alt1">
                                    </div>
                                    
                                    <div class="line number19 index18 alt2">
                                      `            ``if``(pressedState != PRESSED_DOWN &&`
                                    </div>
                                    
                                    <div class="line number20 index19 alt1">
                                      `                    ``pressedState != PRESSED_MOVE_HORIZANTAL)`
                                    </div>
                                    
                                    <div class="line number21 index20 alt2">
                                      `                ``break``;`
                                    </div>
                                    
                                    <div class="line number22 index21 alt1">
                                    </div>
                                    
                                    <div class="line number23 index22 alt2">
                                      `            ``int` `xOffset = (``int``) (ev.getX() - lastActionDownX);`
                                    </div>
                                    
                                    <div class="line number24 index23 alt1">
                                      `            ``int` `yOffset = (``int``) (ev.getY() - lastActionDownY);`
                                    </div>
                                    
                                    <div class="line number25 index24 alt2">
                                    </div>
                                    
                                    <div class="line number26 index25 alt1">
                                      `            ``if``(pressedState == PRESSED_DOWN) {`
                                    </div>
                                    
                                    <div class="line number27 index26 alt2">
                                      `                ``if``(yOffset &gt; ``25` `|| yOffset &lt; -``25``) {`
                                    </div>
                                    
                                    <div class="line number28 index27 alt1">
                                      `                    ``pressedState = PRESSED_MOVE_VERTICAL;`
                                    </div>
                                    
                                    <div class="line number29 index28 alt2">
                                      `                    ``break``;`
                                    </div>
                                    
                                    <div class="line number30 index29 alt1">
                                      `                ``}`
                                    </div>
                                    
                                    <div class="line number31 index30 alt2">
                                      `                ``if``(xOffset &lt; -``50` `|| xOffset &gt; ``50``) {`
                                    </div>
                                    
                                    <div class="line number32 index31 alt1">
                                      `                    ``pressedState = PRESSED_MOVE_HORIZANTAL;`
                                    </div>
                                    
                                    <div class="line number33 index32 alt2">
                                      `                    ``ev.setAction(MotionEvent.ACTION_CANCEL);`
                                    </div>
                                    
                                    <div class="line number34 index33 alt1">
                                      `                ``}`
                                    </div>
                                    
                                    <div class="line number35 index34 alt2">
                                      `            ``} ``else` `if``(pressedState == PRESSED_MOVE_HORIZANTAL) {`
                                    </div>
                                    
                                    <div class="line number36 index35 alt1">
                                      `                ``if` `(currentActivityScaleX &lt; ``0.95``)`
                                    </div>
                                    
                                    <div class="line number37 index36 alt2">
                                      `                    ``showScrollViewMenu();`
                                    </div>
                                    
                                    <div class="line number38 index37 alt1">
                                    </div>
                                    
                                    <div class="line number39 index38 alt2">
                                      `                ``float` `targetScale = getTargetScale(ev.getRawX());`
                                    </div>
                                    
                                    <div class="line number40 index39 alt1">
                                      `                ``ViewHelper.setScaleX(viewActivity, targetScale);`
                                    </div>
                                    
                                    <div class="line number41 index40 alt2">
                                      `                ``ViewHelper.setScaleY(viewActivity, targetScale);`
                                    </div>
                                    
                                    <div class="line number42 index41 alt1">
                                      `                ``ViewHelper.setScaleX(imageViewShadow, targetScale + shadowAdjustScaleX);`
                                    </div>
                                    
                                    <div class="line number43 index42 alt2">
                                      `                ``ViewHelper.setScaleY(imageViewShadow, targetScale + shadowAdjustScaleY);`
                                    </div>
                                    
                                    <div class="line number44 index43 alt1">
                                      `                ``ViewHelper.setAlpha(scrollViewMenu, (``1` `- targetScale) * ``2``.0f);`
                                    </div>
                                    
                                    <div class="line number45 index44 alt2">
                                    </div>
                                    
                                    <div class="line number46 index45 alt1">
                                      `                ``lastRawX = ev.getRawX();`
                                    </div>
                                    
                                    <div class="line number47 index46 alt2">
                                      `                ``return` `true``;`
                                    </div>
                                    
                                    <div class="line number48 index47 alt1">
                                      `            ``}`
                                    </div>
                                    
                                    <div class="line number49 index48 alt2">
                                    </div>
                                    
                                    <div class="line number50 index49 alt1">
                                      `            ``break``;`
                                    </div>
                                    
                                    <div class="line number51 index50 alt2">
                                    </div>
                                    
                                    <div class="line number52 index51 alt1">
                                      `        ``case` `MotionEvent.ACTION_UP:`
                                    </div>
                                    
                                    <div class="line number53 index52 alt2">
                                    </div>
                                    
                                    <div class="line number54 index53 alt1">
                                      `            ``if` `(isInIgnoredView) ``break``;`
                                    </div>
                                    
                                    <div class="line number55 index54 alt2">
                                      `            ``if` `(pressedState != PRESSED_MOVE_HORIZANTAL) ``break``;`
                                    </div>
                                    
                                    <div class="line number56 index55 alt1">
                                    </div>
                                    
                                    <div class="line number57 index56 alt2">
                                      `            ``pressedState = PRESSED_DONE;`
                                    </div>
                                    
                                    <div class="line number58 index57 alt1">
                                      `            ``if` `(isOpened()){`
                                    </div>
                                    
                                    <div class="line number59 index58 alt2">
                                      `                ``if` `(currentActivityScaleX &gt; ````.56f)`
                                    </div>
                                    
                                    <div class="line number60 index59 alt1">
                                      `                    ``closeMenu();`
                                    </div>
                                    
                                    <div class="line number61 index60 alt2">
                                      `                ``else`
                                    </div>
                                    
                                    <div class="line number62 index61 alt1">
                                      `                    ``openMenu(scaleDirection);`
                                    </div>
                                    
                                    <div class="line number63 index62 alt2">
                                      `            ``}``else``{`
                                    </div>
                                    
                                    <div class="line number64 index63 alt1">
                                      `                ``if` `(currentActivityScaleX &lt; ````.94f){`
                                    </div>
                                    
                                    <div class="line number65 index64 alt2">
                                      `                    ``openMenu(scaleDirection);`
                                    </div>
                                    
                                    <div class="line number66 index65 alt1">
                                      `                ``}``else``{`
                                    </div>
                                    
                                    <div class="line number67 index66 alt2">
                                      `                    ``closeMenu();`
                                    </div>
                                    
                                    <div class="line number68 index67 alt1">
                                      `                ``}`
                                    </div>
                                    
                                    <div class="line number69 index68 alt2">
                                      `            ``}`
                                    </div>
                                    
                                    <div class="line number70 index69 alt1">
                                    </div>
                                    
                                    <div class="line number71 index70 alt2">
                                      `            ``break``;`
                                    </div>
                                    
                                    <div class="line number72 index71 alt1">
                                    </div>
                                    
                                    <div class="line number73 index72 alt2">
                                      `    ``}`
                                    </div>
                                    
                                    <div class="line number74 index73 alt1">
                                      `    ``lastRawX = ev.getRawX();`
                                    </div>
                                    
                                    <div class="line number75 index74 alt2">
                                      `    ``return` `super``.dispatchTouchEvent(ev);`
                                    </div>
                                    
                                    <div class="line number76 index75 alt1">
                                      `}`
                                    </div>
                                  </div>
                                </td>
                              </tr>
                            </table>
                          </div>
                        </div>
                        
                        

                          上面代码量有点多,看上去有点晕,接下来我们来分别从按下、移动、放开、来原理分析:
                        

                        
                        

                          &nbsp;
                        

                        
                        

                          

                            MotionEvent.ACTION_DOWN:
                          

                          
                          

                            记录了X,Y轴的坐标点,判断是否打开,设置了按下的状态为PRESSED_DOWN
                          

                          
                          

                            

                              MotionEvent.ACTION_MOVE:
                            

                            
                            

                              拿到当前X,Y减去DOWN下记录下来的X,Y,这样得到了移动的X,Y,
                            

                            
                            

                              然后判断如果如果移动的X,Y大于25或者小于-25就改变按下状态为PRESSED_MOVE_VERTICAL
                            

                            
                            

                              如果移动的X,Y大于50或者小于-50就改变状态为PRESSED_MOVE_HORIZANTAL
                            

                            
                            

                              状态为PRESSED_MOVE_HORIZANTAL就改变菜单主视图内容以及阴影图片大小,在改变的同时还设置了当前菜单的透明度。
                            

                            
                            

                              

                                MotionEvent.ACTION_UP:
                              

                              
                              

                                判断是否菜单是否打开状态,在获取当前缩放的X比例,
                              

                              
                              

                                判断比例小于0.56f,则关闭菜单,反正开启菜单。
                              

                              
                              

                                看完后,我们在回去看看代码,就会发现其实也不过如此~!
                              

                              
                              

                                10.菜单关闭方法,同样也设置了动画监听之前的想法也是成立的。
                              

                              
                              

                                <div>
                                  <div id="highlighter_197589" class="syntaxhighlighter  java">
                                    <div class="toolbar">
                                      [?](http://www.2cto.com/kf/201409/332224.html#)
                                    </div>
                                    
                                    <table border="0" cellspacing="0" cellpadding="0">
                                      <tr>
                                        <td class="gutter">
                                          <div class="line number1 index0 alt2">
                                            1
                                          </div>
                                          
                                          <div class="line number2 index1 alt1">
                                            2
                                          </div>
                                          
                                          <div class="line number3 index2 alt2">
                                            3
                                          </div>
                                          
                                          <div class="line number4 index3 alt1">
                                            4
                                          </div>
                                          
                                          <div class="line number5 index4 alt2">
                                            5
                                          </div>
                                          
                                          <div class="line number6 index5 alt1">
                                            6
                                          </div>
                                          
                                          <div class="line number7 index6 alt2">
                                            7
                                          </div>
                                          
                                          <div class="line number8 index7 alt1">
                                            8
                                          </div>
                                          
                                          <div class="line number9 index8 alt2">
                                            9
                                          </div>
                                          
                                          <div class="line number10 index9 alt1">
                                            10
                                          </div>
                                          
                                          <div class="line number11 index10 alt2">
                                            11
                                          </div>
                                          
                                          <div class="line number12 index11 alt1">
                                            12
                                          </div>
                                          
                                          <div class="line number13 index12 alt2">
                                            13
                                          </div>
                                          
                                          <div class="line number14 index13 alt1">
                                            14
                                          </div>
                                        </td>
                                        
                                        <td class="code">
                                          <div class="container">
                                            <div class="line number1 index0 alt2">
                                              `/**`
                                            </div>
                                            
                                            <div class="line number2 index1 alt1">
                                              `    ``* close the reslide menu;`
                                            </div>
                                            
                                            <div class="line number3 index2 alt2">
                                              `    ``*/`
                                            </div>
                                            
                                            <div class="line number4 index3 alt1">
                                              `   ``public` `void` `closeMenu(){`
                                            </div>
                                            
                                            <div class="line number5 index4 alt2">
                                            </div>
                                            
                                            <div class="line number6 index5 alt1">
                                              `       ``isOpened = ``false``;`
                                            </div>
                                            
                                            <div class="line number7 index6 alt2">
                                              `       ``AnimatorSet scaleUp_activity = buildScaleUpAnimation(viewActivity, ``1``.0f, ``1``.0f);`
                                            </div>
                                            
                                            <div class="line number8 index7 alt1">
                                              `       ``AnimatorSet scaleUp_shadow = buildScaleUpAnimation(imageViewShadow, ``1``.0f, ``1``.0f);`
                                            </div>
                                            
                                            <div class="line number9 index8 alt2">
                                              `       ``AnimatorSet alpha_menu = buildMenuAnimation(scrollViewMenu, ````.0f);`
                                            </div>
                                            
                                            <div class="line number10 index9 alt1">
                                              `       ``scaleUp_activity.addListener(animationListener);`
                                            </div>
                                            
                                            <div class="line number11 index10 alt2">
                                              `       ``scaleUp_activity.playTogether(scaleUp_shadow);`
                                            </div>
                                            
                                            <div class="line number12 index11 alt1">
                                              `       ``scaleUp_activity.playTogether(alpha_menu);`
                                            </div>
                                            
                                            <div class="line number13 index12 alt2">
                                              `       ``scaleUp_activity.start();`
                                            </div>
                                            
                                            <div class="line number14 index13 alt1">
                                              `   ``}`
                                            </div>
                                          </div>
                                        </td>
                                      </tr>
                                    </table>
                                  </div>
                                </div>
                                
                                

                                  11.屏蔽菜单方法
                                

                                
                                

                                  &nbsp;
                                

                                
                                

                                  <div>
                                    <div id="highlighter_622781" class="syntaxhighlighter  java">
                                      <div class="toolbar">
                                        [?](http://www.2cto.com/kf/201409/332224.html#)
                                      </div>
                                      
                                      <table border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                          <td class="gutter">
                                            <div class="line number1 index0 alt2">
                                              1
                                            </div>
                                            
                                            <div class="line number2 index1 alt1">
                                              2
                                            </div>
                                            
                                            <div class="line number3 index2 alt2">
                                              3
                                            </div>
                                          </td>
                                          
                                          <td class="code">
                                            <div class="container">
                                              <div class="line number1 index0 alt2">
                                                `public` `void` `setSwipeDirectionDisable(``int` `direction){`
                                              </div>
                                              
                                              <div class="line number2 index1 alt1">
                                                `        ``disabledSwipeDirection.add(direction);`
                                              </div>
                                              
                                              <div class="line number3 index2 alt2">
                                                `    ``}`
                                              </div>
                                            </div>
                                          </td>
                                        </tr>
                                      </table>
                                    </div>
                                  </div>
                                  
                                  <div>
                                    <div id="highlighter_971803" class="syntaxhighlighter  java">
                                      <div class="toolbar">
                                        [?](http://www.2cto.com/kf/201409/332224.html#)
                                      </div>
                                      
                                      <table border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                          <td class="gutter">
                                            <div class="line number1 index0 alt2">
                                              1
                                            </div>
                                            
                                            <div class="line number2 index1 alt1">
                                              2
                                            </div>
                                            
                                            <div class="line number3 index2 alt2">
                                              3
                                            </div>
                                          </td>
                                          
                                          <td class="code">
                                            <div class="container">
                                              <div class="line number1 index0 alt2">
                                                `private` `boolean` `isInDisableDirection(``int` `direction){`
                                              </div>
                                              
                                              <div class="line number2 index1 alt1">
                                                `        ``return` `disabledSwipeDirection.contains(direction);`
                                              </div>
                                              
                                              <div class="line number3 index2 alt2">
                                                `    ``}`
                                              </div>
                                            </div>
                                          </td>
                                        </tr>
                                      </table>
                                    </div>
                                  </div>
                                  
                                  

                                    原理分析:在重写dispatchTouchEvent的时候,细心的同学应该会看到,ACTION_MOVE下面有个判断
                                  

                                  
                                  

                                    &nbsp;
                                  

                                  
                                  

                                    <div>
                                      <div id="highlighter_907157" class="syntaxhighlighter  java">
                                        <div class="toolbar">
                                          [?](http://www.2cto.com/kf/201409/332224.html#)
                                        </div>
                                        
                                        <table border="0" cellspacing="0" cellpadding="0">
                                          <tr>
                                            <td class="gutter">
                                              <div class="line number1 index0 alt2">
                                                1
                                              </div>
                                            </td>
                                            
                                            <td class="code">
                                              <div class="container">
                                                <div class="line number1 index0 alt2">
                                                  `if` `(isInIgnoredView || isInDisableDirection(scaleDirection))`
                                                </div>
                                              </div>
                                            </td>
                                          </tr>
                                        </table>
                                      </div>
                                    </div>
                                    
                                    

                                      如果这个方向的菜单被屏蔽了,就滑不出来了。
                                    

                                    
                                    

                                      &nbsp;
                                    

                                    
                                    

                                      最后我们会发现我们一直都没说到TouchDisableView,其实initValue的时候就初始化了,它就是viewActivity,是我们的内容视图。
                                    

                                    
                                    

                                      ![\](http://www.2cto.com/uploadfile/Collfiles/20140911/20140911091424131.png)
                                    

                                    
                                    

                                      我们来看看它做了什么?
                                    

                                    
                                    

                                      <div>
                                        <div id="highlighter_627811" class="syntaxhighlighter  java">
                                          <div class="toolbar">
                                            [?](http://www.2cto.com/kf/201409/332224.html#)
                                          </div>
                                          
                                          <table border="0" cellspacing="0" cellpadding="0">
                                            <tr>
                                              <td class="gutter">
                                                <div class="line number1 index0 alt2">
                                                  1
                                                </div>
                                                
                                                <div class="line number2 index1 alt1">
                                                  2
                                                </div>
                                                
                                                <div class="line number3 index2 alt2">
                                                  3
                                                </div>
                                                
                                                <div class="line number4 index3 alt1">
                                                  4
                                                </div>
                                                
                                                <div class="line number5 index4 alt2">
                                                  5
                                                </div>
                                                
                                                <div class="line number6 index5 alt1">
                                                  6
                                                </div>
                                                
                                                <div class="line number7 index6 alt2">
                                                  7
                                                </div>
                                                
                                                <div class="line number8 index7 alt1">
                                                  8
                                                </div>
                                                
                                                <div class="line number9 index8 alt2">
                                                  9
                                                </div>
                                                
                                                <div class="line number10 index9 alt1">
                                                  10
                                                </div>
                                                
                                                <div class="line number11 index10 alt2">
                                                  11
                                                </div>
                                                
                                                <div class="line number12 index11 alt1">
                                                  12
                                                </div>
                                                
                                                <div class="line number13 index12 alt2">
                                                  13
                                                </div>
                                                
                                                <div class="line number14 index13 alt1">
                                                  14
                                                </div>
                                                
                                                <div class="line number15 index14 alt2">
                                                  15
                                                </div>
                                                
                                                <div class="line number16 index15 alt1">
                                                  16
                                                </div>
                                                
                                                <div class="line number17 index16 alt2">
                                                  17
                                                </div>
                                                
                                                <div class="line number18 index17 alt1">
                                                  18
                                                </div>
                                                
                                                <div class="line number19 index18 alt2">
                                                  19
                                                </div>
                                                
                                                <div class="line number20 index19 alt1">
                                                  20
                                                </div>
                                                
                                                <div class="line number21 index20 alt2">
                                                  21
                                                </div>
                                                
                                                <div class="line number22 index21 alt1">
                                                  22
                                                </div>
                                                
                                                <div class="line number23 index22 alt2">
                                                  23
                                                </div>
                                                
                                                <div class="line number24 index23 alt1">
                                                  24
                                                </div>
                                                
                                                <div class="line number25 index24 alt2">
                                                  25
                                                </div>
                                                
                                                <div class="line number26 index25 alt1">
                                                  26
                                                </div>
                                                
                                                <div class="line number27 index26 alt2">
                                                  27
                                                </div>
                                                
                                                <div class="line number28 index27 alt1">
                                                  28
                                                </div>
                                                
                                                <div class="line number29 index28 alt2">
                                                  29
                                                </div>
                                                
                                                <div class="line number30 index29 alt1">
                                                  30
                                                </div>
                                                
                                                <div class="line number31 index30 alt2">
                                                  31
                                                </div>
                                              </td>
                                              
                                              <td class="code">
                                                <div class="container">
                                                  <div class="line number1 index0 alt2">
                                                    `@Override`
                                                  </div>
                                                  
                                                  <div class="line number2 index1 alt1">
                                                    `    ``protected` `void` `onMeasure(``int` `widthMeasureSpec, ``int` `heightMeasureSpec) {`
                                                  </div>
                                                  
                                                  <div class="line number3 index2 alt2">
                                                  </div>
                                                  
                                                  <div class="line number4 index3 alt1">
                                                    `        ``int` `width = getDefaultSize(````, widthMeasureSpec);`
                                                  </div>
                                                  
                                                  <div class="line number5 index4 alt2">
                                                    `        ``int` `height = getDefaultSize(````, heightMeasureSpec);`
                                                  </div>
                                                  
                                                  <div class="line number6 index5 alt1">
                                                    `        ``setMeasuredDimension(width, height);`
                                                  </div>
                                                  
                                                  <div class="line number7 index6 alt2">
                                                  </div>
                                                  
                                                  <div class="line number8 index7 alt1">
                                                    `        ``final` `int` `contentWidth = getChildMeasureSpec(widthMeasureSpec, ````, width);`
                                                  </div>
                                                  
                                                  <div class="line number9 index8 alt2">
                                                    `        ``final` `int` `contentHeight = getChildMeasureSpec(heightMeasureSpec, ````, height);`
                                                  </div>
                                                  
                                                  <div class="line number10 index9 alt1">
                                                    `        ``mContent.measure(contentWidth, contentHeight);`
                                                  </div>
                                                  
                                                  <div class="line number11 index10 alt2">
                                                    `    ``}`
                                                  </div>
                                                  
                                                  <div class="line number12 index11 alt1">
                                                  </div>
                                                  
                                                  <div class="line number13 index12 alt2">
                                                    `    ``@Override`
                                                  </div>
                                                  
                                                  <div class="line number14 index13 alt1">
                                                    `    ``protected` `void` `onLayout(``boolean` `changed, ``int` `l, ``int` `t, ``int` `r, ``int` `b) {`
                                                  </div>
                                                  
                                                  <div class="line number15 index14 alt2">
                                                    `        ``final` `int` `width = r - l;`
                                                  </div>
                                                  
                                                  <div class="line number16 index15 alt1">
                                                    `        ``final` `int` `height = b - t;`
                                                  </div>
                                                  
                                                  <div class="line number17 index16 alt2">
                                                    `        ``mContent.layout(````, ````, width, height);`
                                                  </div>
                                                  
                                                  <div class="line number18 index17 alt1">
                                                    `    ``}`
                                                  </div>
                                                  
                                                  <div class="line number19 index18 alt2">
                                                  </div>
                                                  
                                                  <div class="line number20 index19 alt1">
                                                    `    ``@Override`
                                                  </div>
                                                  
                                                  <div class="line number21 index20 alt2">
                                                    `    ``public` `boolean` `onInterceptTouchEvent(MotionEvent ev) {`
                                                  </div>
                                                  
                                                  <div class="line number22 index21 alt1">
                                                    `        ``return` `mTouchDisabled;`
                                                  </div>
                                                  
                                                  <div class="line number23 index22 alt2">
                                                    `    ``}`
                                                  </div>
                                                  
                                                  <div class="line number24 index23 alt1">
                                                  </div>
                                                  
                                                  <div class="line number25 index24 alt2">
                                                    `    ``void` `setTouchDisable(``boolean` `disableTouch) {`
                                                  </div>
                                                  
                                                  <div class="line number26 index25 alt1">
                                                    `        ``mTouchDisabled = disableTouch;`
                                                  </div>
                                                  
                                                  <div class="line number27 index26 alt2">
                                                    `    ``}`
                                                  </div>
                                                  
                                                  <div class="line number28 index27 alt1">
                                                  </div>
                                                  
                                                  <div class="line number29 index28 alt2">
                                                    `    ``boolean` `isTouchDisabled() {`
                                                  </div>
                                                  
                                                  <div class="line number30 index29 alt1">
                                                    `        ``return` `mTouchDisabled;`
                                                  </div>
                                                  
                                                  <div class="line number31 index30 alt2">
                                                    `    ``}`
                                                  </div>
                                                </div>
                                              </td>
                                            </tr>
                                          </table>
                                        </div>
                                      </div>
                                      
                                      

                                        动态设置宽高,设置事件是否传递下去的flag。
                                      

                                      
                                      

                                        &nbsp;

💬 评论