バックグラウンド
ここ数か月で、Googleはナビゲーション ドロワー (AKA スライド メニュー) を備えたYoutube アプリをリリースしました。
私が取り組んでいるアプリに搭載したいクールな機能がたくさんあります。
機能は次のとおりです。
スライドを開始するには、任意の場所をタッチします。
モード切り替え時のアクションバーの「上」ボタンの移動アイコン。
メニューをスライドすると、コンテンツ領域 (メニュー自体ではなく、右側の領域) がスクロールせずに残ります。
アクションバーはスクロールせずに留まります。
コンテンツ領域 (メニュー自体ではなく右側の領域) は、スクロール時に色が変わりますが、メニュー自体ではありません。
ここに私が話していることを示すスクリーンショットがあります:
滑る前に:
スライド後:
現在、ナビゲーション ドロワーの使用を担当する 2 つの主要なライブラリを知っています。
問題
公式ライブラリとslidingMenuライブラリの両方に、YouTubeアプリのようにこれらの機能がすべて組み合わされているわけではありません.
たとえば、公式ライブラリには機能 #1 がありません (そのため、このスレッドを投稿しました) ので、代わりにslidingMenu ライブラリを使用しました。
ただし、slidingMenu ライブラリには機能 #2 と #3 がありません (またはありますか?)。
両方のライブラリには、何ができるかについての十分なドキュメント/例がないため、それらを使用したり、新しい機能を追加したりすることは非常に困難です.
私が試したこと
現在、私はslidingMenuライブラリを使用しているので、これはslideMenuを準備するための私のコードです:
activity.setBehindContentView(slidingMenuRootView);
mSlidingMenu = activity.getSlidingMenu();
mSlidingMenu.setShadowWidthRes(R.dimen.slidingmenu_shadow_width);
mSlidingMenu.setShadowDrawable(R.drawable.slidingmenu_shadow);
mSlidingMenu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
mSlidingMenu.setFadeEnabled(true);
mSlidingMenu.setFadeDegree(1.0f);
mSlidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
activity.setSlidingActionBarEnabled(false);
質問
SlidingMenu (またはナビゲーション ドロワー) を YouTube アプリのように動作させるにはどうすればよいですか?
可能な解決策
編集: menuDrawer ライブラリ(github リンクはこちら) を使用して、私が言及したすべての機能を正常に達成しました。サンプルコードは次のとおりです。
public class ActionBarSherlockSample extends SherlockActivity {
private MenuDrawer mDrawer;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar();
mDrawer = MenuDrawer.attach(this, MenuDrawer.Type.OVERLAY);
final TextView menuView = new TextView(this);
menuView.setTextColor(0xFFFFFFFF);
menuView.setText("As the drawer opens, the drawer indicator icon becomes smaller.");
menuView.setGravity(Gravity.CENTER);
mDrawer.setMenuView(menuView);
mDrawer.setTouchMode(MenuDrawer.TOUCH_MODE_FULLSCREEN);
mDrawer.setOnDrawerStateChangeListener(new OnDrawerStateChangeListener() {
@Override
public void onDrawerStateChange(final int oldState, final int newState) {
Log.d("AppLog", "oldState:" + oldState + " newState:" + newState);
}
@Override
public void onDrawerSlide(final float openRatio, final int offsetPixels) {
}
});
final TextView contentView = new TextView(this);
contentView
.setText("This sample uses ActionBarSherlock to display an ActionBar on older platforms. The drawer indicator, "
+ "as per the design guidelines, is visible in the top left corner.");
contentView.setGravity(Gravity.CENTER);
mDrawer.setContentView(contentView);
mDrawer.setSlideDrawable(R.drawable.ic_drawer);
mDrawer.setDrawerIndicatorEnabled(true);
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
mDrawer.toggleMenu();
break;
}
return super.onOptionsItemSelected(item);
}
}