1. 程式人生 > >DrawerLayout 抽屜效果 側滑

DrawerLayout 抽屜效果 側滑

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

	<!-- 第一個佈局是主頁面 -->
	<RelativeLayout 
	    android:id="@+id/layout_Main"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent" >
	
	    <TextView
	        android:id="@+id/tvMain"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:layout_centerHorizontal="true"
	        android:gravity="center"
	        android:text="主頁面" 
	        android:textSize="20sp"/>
	    
	</RelativeLayout>
	
	<!-- 第二個佈局是抽屜效果顯示的介面 -->
	
	<RelativeLayout
	    android:id="@+id/layout_Drawer"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"
	    android:layout_gravity="start">
	    
	    <TextView 
	        android:id="@+id/tvDrawer"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        android:layout_centerHorizontal="true"
	        android:gravity="center"
	        android:text="抽屜效果頁面" 
	        android:textSize="20sp"/>
	</RelativeLayout>

</android.support.v4.widget.DrawerLayout>

在程式中:

public class MainActivity extends Activity {

	private DrawerLayout drawerLayout;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);

		drawerLayout.openDrawer(Gravity.LEFT);
	}
}
說明:

佈局檔案中使用android:layout_gravity="start"來顯示抽屜效果現實的方向,start/left表示左滑顯現,end/right表示右滑顯示,佈局檔案中的方向要與程式碼中的drawerLayout.openDrawer(Gravity.LEFT);的LEFT(對應於佈局中start/left)和RIGHT(對應佈局中end/right)相對應。
某些時候主頁面中使用ViewPager,需要鎖定滑動顯示抽屜,在程式碼中設定drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);


附:一些側滑效果jar包和部分程式碼

jar包地址:http://download.csdn.net/download/gqqzxc/9331007(非原創)

程式碼:

drawerLayout.setDrawerListener(new DrawerListener() {

			@Override
			public void onDrawerStateChanged(int arg0) {

			}

			@Override
			public void onDrawerSlide(View drawerView, float slideOffset) {
				View mContent = drawerLayout.getChildAt(0);
				View mMenu = drawerView;
				float scale = 1 - slideOffset;
				float rightScale = 0.8f + scale * 0.2f;

				if (drawerView.getTag().equals("LEFT")) {

					float leftScale = 1 - 0.3f * scale;

					ViewHelper.setScaleX(mMenu, leftScale);
					ViewHelper.setScaleY(mMenu, leftScale);
					ViewHelper.setAlpha(mMenu, 0.6f + 0.4f * (1 - scale));
					ViewHelper.setTranslationX(mContent,
							mMenu.getMeasuredWidth() * (1 - scale));
					ViewHelper.setPivotX(mContent, 0);
					ViewHelper.setPivotY(mContent,
							mContent.getMeasuredHeight() / 2);
					mContent.invalidate();
					ViewHelper.setScaleX(mContent, rightScale);
					ViewHelper.setScaleY(mContent, rightScale);
				}
			}

			@Override
			public void onDrawerOpened(View arg0) {

			}

			@Override
			public void onDrawerClosed(View arg0) {

			}
		});