zoukankan      html  css  js  c++  java
  • DrawerLayout实现双向侧滑

    1.首先来欣赏下效果图

    2.先看看activity_main的布局,DrawerLayout里第一个布局时主内容,第二个布局是左侧,第三个布局是右侧。

     1 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:id="@+id/id_drawerLayout"
     4     android:layout_width="match_parent"
     5     android:layout_height="match_parent"
     6     android:background="@drawable/img_frame_background" >
     7 
     8     <RelativeLayout
     9         android:layout_width="match_parent"
    10         android:layout_height="match_parent"
    11         android:background="@drawable/qq" >
    12 
    13         <Button
    14             android:layout_width="40dp"
    15             android:layout_height="30dp"
    16             android:layout_marginTop="10dp"
    17             android:layout_alignParentRight="true"
    18             android:background="@drawable/youce"
    19             android:onClick="OpenRightMenu" />
    20     </RelativeLayout>
    21 
    22     <fragment
    23         android:id="@+id/id_left_menu"
    24         android:name="com.watson.lv.drawerlayoutdemo.MenuLeftFragment"
    25         android:layout_width="200dp"
    26         android:layout_height="match_parent"
    27         android:layout_gravity="left"
    28         android:tag="LEFT" />
    29 
    30     <fragment
    31         android:id="@+id/id_right_menu"
    32         android:name="com.watson.lv.drawerlayoutdemo.MenuRightFragment"
    33         android:layout_width="100dp"
    34         android:layout_height="match_parent"
    35         android:layout_gravity="right"
    36         android:tag="RIGHT" />
    37 
    38 </android.support.v4.widget.DrawerLayout>

    3.layout_menu是左侧布局

      1 <?xml version="1.0" encoding="utf-8"?>
      2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      3     android:layout_width="match_parent"
      4     android:layout_height="match_parent"
      5     android:background="#00000000" >
      6 
      7     <LinearLayout
      8         android:layout_width="match_parent"
      9         android:layout_height="wrap_content"
     10         android:layout_centerVertical="true"
     11         android:orientation="vertical" >
     12 
     13         <RelativeLayout
     14             android:layout_width="match_parent"
     15             android:layout_height="wrap_content" >
     16 
     17             <ImageView
     18                 android:id="@+id/one"
     19                 android:layout_width="50dp"
     20                 android:layout_height="50dp"
     21                 android:layout_centerVertical="true"
     22                 android:layout_marginLeft="20dp"
     23                 android:layout_marginTop="20dp"
     24                 android:src="@drawable/img_1" />
     25 
     26             <TextView
     27                 android:layout_width="fill_parent"
     28                 android:layout_height="wrap_content"
     29                 android:layout_centerVertical="true"
     30                 android:layout_marginLeft="20dp"
     31                 android:layout_toRightOf="@id/one"
     32                 android:text="第1个Item"
     33                 android:textColor="#f0f0f0"
     34                 android:textSize="20sp" />
     35         </RelativeLayout>
     36 
     37         <RelativeLayout
     38             android:layout_width="match_parent"
     39             android:layout_height="wrap_content" >
     40 
     41             <ImageView
     42                 android:id="@+id/two"
     43                 android:layout_width="50dp"
     44                 android:layout_height="50dp"
     45                 android:layout_centerVertical="true"
     46                 android:layout_marginLeft="20dp"
     47                 android:layout_marginTop="20dp"
     48                 android:src="@drawable/img_2" />
     49 
     50             <TextView
     51                 android:layout_width="fill_parent"
     52                 android:layout_height="wrap_content"
     53                 android:layout_centerVertical="true"
     54                 android:layout_marginLeft="20dp"
     55                 android:layout_toRightOf="@id/two"
     56                 android:text="第2个Item"
     57                 android:textColor="#f0f0f0"
     58                 android:textSize="20sp" />
     59         </RelativeLayout>
     60 
     61         <RelativeLayout
     62             android:layout_width="match_parent"
     63             android:layout_height="wrap_content" >
     64 
     65             <ImageView
     66                 android:id="@+id/three"
     67                 android:layout_width="50dp"
     68                 android:layout_height="50dp"
     69                 android:layout_centerVertical="true"
     70                 android:layout_marginLeft="20dp"
     71                 android:layout_marginTop="20dp"
     72                 android:src="@drawable/img_3" />
     73 
     74             <TextView
     75                 android:layout_width="fill_parent"
     76                 android:layout_height="wrap_content"
     77                 android:layout_centerVertical="true"
     78                 android:layout_marginLeft="20dp"
     79                 android:layout_toRightOf="@id/three"
     80                 android:text="第3个Item"
     81                 android:textColor="#f0f0f0"
     82                 android:textSize="20sp" />
     83         </RelativeLayout>
     84 
     85         <RelativeLayout
     86             android:layout_width="match_parent"
     87             android:layout_height="wrap_content" >
     88 
     89             <ImageView
     90                 android:id="@+id/four"
     91                 android:layout_width="50dp"
     92                 android:layout_height="50dp"
     93                 android:layout_centerVertical="true"
     94                 android:layout_marginLeft="20dp"
     95                 android:layout_marginTop="20dp"
     96                 android:src="@drawable/img_4" />
     97 
     98             <TextView
     99                 android:layout_width="fill_parent"
    100                 android:layout_height="wrap_content"
    101                 android:layout_centerVertical="true"
    102                 android:layout_marginLeft="20dp"
    103                 android:layout_toRightOf="@id/four"
    104                 android:text="第4个Item"
    105                 android:textColor="#f0f0f0"
    106                 android:textSize="20sp" />
    107         </RelativeLayout>
    108 
    109         <RelativeLayout
    110             android:layout_width="match_parent"
    111             android:layout_height="wrap_content" >
    112 
    113             <ImageView
    114                 android:id="@+id/five"
    115                 android:layout_width="50dp"
    116                 android:layout_height="50dp"
    117                 android:layout_centerVertical="true"
    118                 android:layout_marginLeft="20dp"
    119                 android:layout_marginTop="20dp"
    120                 android:src="@drawable/img_5" />
    121 
    122             <TextView
    123                 android:layout_width="fill_parent"
    124                 android:layout_height="wrap_content"
    125                 android:layout_centerVertical="true"
    126                 android:layout_marginLeft="20dp"
    127                 android:layout_toRightOf="@id/five"
    128                 android:text="第5个Item"
    129                 android:textColor="#f0f0f0"
    130                 android:textSize="20sp" />
    131         </RelativeLayout>
    132     </LinearLayout>
    133 
    134 </RelativeLayout>
     1 package com.watson.lv.drawerlayoutdemo;
     2 
     3 import android.os.Bundle;
     4 import android.support.v4.app.Fragment;
     5 import android.view.LayoutInflater;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 
     9 /**
    10  * Created by dell on 2018/3/28.
    11  */
    12 
    13 public class MenuLeftFragment extends Fragment
    14 {
    15 
    16     @Override
    17     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    18                              Bundle savedInstanceState)
    19     {
    20         return inflater.inflate(R.layout.layout_menu, container, false);
    21     }
    22 }

    4.menu_layout_right是右侧布局。

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:gravity="center_vertical"
     6     android:orientation="vertical" >
     7 
     8     <LinearLayout
     9         android:layout_width="match_parent"
    10         android:layout_height="wrap_content"
    11         android:layout_centerVertical="true"
    12         android:layout_gravity="center_vertical"
    13         android:layout_marginBottom="20dp"
    14         android:orientation="vertical" >
    15 
    16         <ImageView
    17             android:layout_width="60dp"
    18             android:layout_height="60dp"
    19             android:layout_gravity="center"
    20             android:src="@drawable/research" />
    21 
    22         <TextView
    23             android:layout_width="fill_parent"
    24             android:layout_height="wrap_content"
    25             android:gravity="center"
    26             android:text="扫一扫"
    27             android:textColor="#ffffff" />
    28     </LinearLayout>
    29 
    30     <LinearLayout
    31         android:layout_width="match_parent"
    32         android:layout_height="wrap_content"
    33         android:layout_centerVertical="true"
    34         android:layout_gravity="center_vertical"
    35         android:layout_marginBottom="20dp"
    36         android:orientation="vertical" >
    37 
    38         <ImageView
    39             android:layout_width="60dp"
    40             android:layout_height="60dp"
    41             android:layout_gravity="center"
    42             android:src="@drawable/add" />
    43 
    44         <TextView
    45             android:layout_width="fill_parent"
    46             android:layout_height="wrap_content"
    47             android:gravity="center"
    48             android:text="讨论组"
    49             android:textColor="#ffffff" />
    50     </LinearLayout>
    51 
    52     <LinearLayout
    53         android:layout_width="match_parent"
    54         android:layout_height="wrap_content"
    55         android:layout_centerVertical="true"
    56         android:layout_gravity="center_vertical"
    57         android:layout_marginBottom="20dp"
    58         android:orientation="vertical" >
    59 
    60         <ImageView
    61             android:layout_width="60dp"
    62             android:layout_height="60dp"
    63             android:layout_gravity="center"
    64             android:src="@drawable/wode" />
    65 
    66         <TextView
    67             android:layout_width="fill_parent"
    68             android:layout_height="wrap_content"
    69             android:gravity="center"
    70             android:text="扫一扫"
    71             android:textColor="#ffffff" />
    72     </LinearLayout>
    73 
    74     <LinearLayout
    75         android:layout_width="match_parent"
    76         android:layout_height="wrap_content"
    77         android:layout_centerVertical="true"
    78         android:layout_gravity="center_vertical"
    79         android:layout_marginBottom="20dp"
    80         android:orientation="vertical" >
    81 
    82         <ImageView
    83             android:layout_width="60dp"
    84             android:layout_height="60dp"
    85             android:layout_gravity="center"
    86             android:src="@drawable/saoma" />
    87 
    88         <TextView
    89             android:layout_width="fill_parent"
    90             android:layout_height="wrap_content"
    91             android:gravity="center"
    92             android:text="讨论组"
    93             android:textColor="#ffffff" />
    94     </LinearLayout>
    95 
    96 </LinearLayout>
     1 package com.watson.lv.drawerlayoutdemo;
     2 
     3 import android.os.Bundle;
     4 import android.support.v4.app.Fragment;
     5 import android.view.LayoutInflater;
     6 import android.view.View;
     7 import android.view.ViewGroup;
     8 
     9 /**
    10  * Created by dell on 2018/3/28.
    11  */
    12 
    13 public class MenuRightFragment extends Fragment
    14 {
    15 
    16     @Override
    17     public View onCreateView(LayoutInflater inflater, ViewGroup container,
    18                              Bundle savedInstanceState)
    19     {
    20         return inflater.inflate(R.layout.menu_layout_right, container, false);
    21     }
    22 }

    5.最后展示出MainActivity

      1 package com.watson.lv.drawerlayoutdemo;
      2 
      3 import android.os.Bundle;
      4 import android.support.v4.app.FragmentActivity;
      5 import android.support.v4.widget.DrawerLayout;
      6 import android.support.v4.widget.DrawerLayout.DrawerListener;
      7 import android.view.Gravity;
      8 import android.view.View;
      9 import android.view.Window;
     10 
     11 import com.nineoldandroids.view.ViewHelper;
     12 
     13 public class MainActivity extends FragmentActivity
     14 {
     15 
     16     private DrawerLayout mDrawerLayout;
     17 
     18     @Override
     19     protected void onCreate(Bundle savedInstanceState)
     20     {
     21         super.onCreate(savedInstanceState);
     22         requestWindowFeature(Window.FEATURE_NO_TITLE);
     23         setContentView(R.layout.activity_main);
     24 
     25         initView();
     26         initEvents();
     27 
     28     }
     29 
     30     public void OpenRightMenu(View view)
     31     {
     32         mDrawerLayout.openDrawer(Gravity.RIGHT);
     33 //        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED,
     34 //                Gravity.RIGHT);  //右侧菜单只有点击才能将其弹出
     35     }
     36 
     37     private void initEvents()
     38     {
     39         mDrawerLayout.addDrawerListener(new DrawerListener()
     40         {
     41             @Override
     42             public void onDrawerStateChanged(int newState)
     43             {
     44             }
     45 
     46             @Override
     47             public void onDrawerSlide(View drawerView, float slideOffset)
     48             {
     49                 View mContent = mDrawerLayout.getChildAt(0);
     50                 View mMenu = drawerView;
     51                 float scale = 1 - slideOffset;
     52                 float rightScale = 0.8f + scale * 0.2f;
     53 
     54                 if (drawerView.getTag().equals("LEFT"))
     55                 {
     56 
     57                     float leftScale = 1 - 0.3f * scale;
     58 
     59                     ViewHelper.setScaleX(mMenu, leftScale);
     60                     ViewHelper.setScaleY(mMenu, leftScale);
     61                     ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));
     62                     ViewHelper.setTranslationX(mContent,
     63                             mMenu.getMeasuredWidth() * (1 - scale));
     64                     ViewHelper.setPivotX(mContent, 0);
     65                     ViewHelper.setPivotY(mContent,
     66                             mContent.getMeasuredHeight() / 2);
     67                     mContent.invalidate();
     68                     ViewHelper.setScaleX(mContent, rightScale);
     69                     ViewHelper.setScaleY(mContent, rightScale);
     70                 } else
     71                 {
     72                     ViewHelper.setTranslationX(mContent,
     73                             -mMenu.getMeasuredWidth() * slideOffset);
     74                     ViewHelper.setPivotX(mContent, mContent.getMeasuredWidth());
     75                     ViewHelper.setPivotY(mContent,
     76                             mContent.getMeasuredHeight() / 2);
     77                     mContent.invalidate();
     78                     ViewHelper.setScaleX(mContent, rightScale);
     79                     ViewHelper.setScaleY(mContent, rightScale);
     80                 }
     81 
     82             }
     83 
     84             @Override
     85             public void onDrawerOpened(View drawerView)
     86             {
     87             }
     88 
     89             @Override
     90             public void onDrawerClosed(View drawerView)
     91             {
     92 //                mDrawerLayout.setDrawerLockMode(
     93 //                        DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);
     94             }
     95         });
     96 
     97 
     98     }
     99 
    100     private void initView()
    101     {
    102         mDrawerLayout = (DrawerLayout) findViewById(R.id.id_drawerLayout);
    103 //        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED,
    104 //                Gravity.RIGHT);
    105     }
    106 
    107 }
  • 相关阅读:
    自定义事件的触发dispatchEvent
    [转]ProxmoxVE 干掉 VMware
    【转】怎么去阅读Chromium的源码?
    Delphi内存专题
    Delphi 线程同步技术(转)
    【纸模】六角大王 Super 5.6 CHS 简体中文版 U20080725+[手册]窗口与工具的概要(PDF格式)
    ReSharper反编译C#类库
    CS DevExpress程序启动(主窗体初始化优化)
    【EasyNetQ】- 发布/订阅模式
    Intellij Idea调试java文件时 怎么跳过class文件?
  • 原文地址:https://www.cnblogs.com/evolutionoflicorice/p/8669905.html
Copyright © 2011-2022 走看看