侧滑菜单之三仿QQ左右侧滑菜单的实现(android.support.v4.widget.DrawerLayout)
1.效果图:


2. 右边菜单栏的xml布局
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/wode" /> 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/saoma" /> 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>
3. 左边的xml布局
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>
4. 主的布局视图
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.zhy.demo_zhy_17_drawerlayout.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.zhy.demo_zhy_17_drawerlayout.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>
5. 左侧对应fragment
1 package com.zhy.demo_zhy_17_drawerlayout; 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 public class MenuLeftFragment extends Fragment 10 { 11 12 @Override 13 public View onCreateView(LayoutInflater inflater, ViewGroup container, 14 Bundle savedInstanceState) 15 { 16 return inflater.inflate(R.layout.layout_menu, container, false); 17 } 18 }
6. 右边对应fragment
1 package com.zhy.demo_zhy_17_drawerlayout; 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 public class MenuRightFragment extends Fragment 10 { 11 12 @Override 13 public View onCreateView(LayoutInflater inflater, ViewGroup container, 14 Bundle savedInstanceState) 15 { 16 return inflater.inflate(R.layout.menu_layout_right, container, false); 17 } 18 }
7. Activity
1 package com.zhy.demo_zhy_17_drawerlayout; 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.MotionEvent; 9 import android.view.View; 10 import android.view.Window; 11 12 import com.nineoldandroids.view.ViewHelper; 13 14 /** 15 * http://blog.csdn.net/lmj623565791/article/details/41531475 16 * @author zhy 17 * 18 * 注意:DrawerLayout和SlidingPaneLayout都能实现侧滑菜单 19 * 但SlidingPaneLayout不能实现右侧滑出,DrawerLayout则可以 20 * 21 */ 22 public class MainActivity extends FragmentActivity 23 { 24 25 private DrawerLayout mDrawerLayout; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) 29 { 30 super.onCreate(savedInstanceState); 31 requestWindowFeature(Window.FEATURE_NO_TITLE); 32 setContentView(R.layout.activity_main); 33 34 initView(); 35 initEvents(); 36 37 } 38 39 public void OpenRightMenu(View view) 40 { 41 mDrawerLayout.openDrawer(Gravity.RIGHT); 42 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, 43 Gravity.RIGHT); 44 } 45 46 47 48 private void initEvents() 49 { 50 mDrawerLayout.setDrawerListener(new DrawerListener() 51 { 52 @Override 53 public void onDrawerStateChanged(int newState) 54 { 55 } 56 57 @Override 58 public void onDrawerSlide(View drawerView, float slideOffset) 59 { 60 View mContent = mDrawerLayout.getChildAt(0); 61 View mMenu = drawerView; 62 float scale = 1 - slideOffset; 63 float rightScale = 0.8f + scale * 0.2f; 64 65 if (drawerView.getTag().equals("LEFT")) 66 { 67 68 float leftScale = 1 - 0.3f * scale; 69 70 ViewHelper.setScaleX(mMenu, leftScale); 71 ViewHelper.setScaleY(mMenu, leftScale); 72 ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale)); 73 ViewHelper.setTranslationX(mContent, 74 mMenu.getMeasuredWidth() * (1 - scale)); 75 ViewHelper.setPivotX(mContent, 0); 76 ViewHelper.setPivotY(mContent, 77 mContent.getMeasuredHeight() / 2); 78 mContent.invalidate(); 79 ViewHelper.setScaleX(mContent, rightScale); 80 ViewHelper.setScaleY(mContent, rightScale); 81 } else 82 { 83 ViewHelper.setTranslationX(mContent, 84 -mMenu.getMeasuredWidth() * slideOffset); 85 ViewHelper.setPivotX(mContent, mContent.getMeasuredWidth()); 86 ViewHelper.setPivotY(mContent, 87 mContent.getMeasuredHeight() / 2); 88 mContent.invalidate(); 89 ViewHelper.setScaleX(mContent, rightScale); 90 ViewHelper.setScaleY(mContent, rightScale); 91 } 92 93 } 94 95 @Override 96 public void onDrawerOpened(View drawerView) 97 { 98 } 99 100 @Override 101 public void onDrawerClosed(View drawerView) 102 { 103 mDrawerLayout.setDrawerLockMode( 104 DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT); 105 } 106 }); 107 } 108 109 private void initView() 110 { 111 mDrawerLayout = (DrawerLayout) findViewById(R.id.id_drawerLayout); 112 mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, 113 Gravity.RIGHT); 114 } 115 116 }
浙公网安备 33010602011771号