DrawerLayout 抽屜效果 側滑
阿新 • • 發佈:2019-02-18
<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) {
}
});