Answers:
我自己玩过这个游戏,找到的最好方法是使用FrameLayout并将自定义的HorizontalScrollView(HSV)放在菜单顶部。HSV内部是您的应用程序视图,但是作为第一个子视图有一个透明视图。这意味着,当HSV的滚动偏移量为零时,菜单将显示出来(并且仍然可以令人惊讶地单击)。
当应用程序启动时,我们将HSV滚动到第一个可见应用程序View的偏移量,当我们想要显示菜单时,我们向后滚动以通过透明View显示菜单。
代码在这里,启动活动中的底部两个按钮(分别称为HorzScrollWithListMenu和HorzScrollWithImageMenu)显示了我可以想到的最佳菜单:
模拟器的屏幕截图(中间滚动):
设备的屏幕截图(完整滚动)。请注意,我的图标不如Facebook菜单图标宽,因此菜单视图和“应用”视图未对齐。
getDrawingCache()
非菜单活动并从位图创建ImageView 来使用其他活动。然后在类的方法上调用startActivity(intent)
&以立即显示新活动并获得所需的效果。overridePendingTransition(0, 0)
onClick
ClickListenerForScrolling
我已经在此图书馆项目中实现了类似Facebook的滑出导航。
您可以轻松地将其内置到应用程序,UI和导航中。您将只需要实现一个Activity和一个Fragment,让库知道它-库将提供所有想要的动画和导航。
在仓库中,您可以找到演示项目,以及如何使用lib来实现类似Facebook的导航。这是带有演示项目记录的简短视频。
另外,此库应与此ActionBar模式兼容,因为它基于活动事务和TranslateAnimations(而不是片段事务和自定义视图)。
目前,最大的问题是使其能够很好地适用于支持纵向和横向模式的应用程序。如果您有任何反馈,请通过github提供。
祝一切
顺利Alex
((MenuActivity) getActivity()).getSlideoutHelper().close(); startActivity(new Intent(getActivity(), MyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("category", position));
我认为,Facebook的应用程序不是写在本地代码(通过本机代码我的意思是,在Android中使用的布局),但他们对于IT部门使用的WebView,并使用了一些JavaScript UI库像煎茶。使用sencha框架可以轻松实现。
我刚刚为自己的项目实现了类似的视图。你可以在这里检查
这是基于我编写的库的示例应用程序的屏幕:
将此自定义视图用作XML布局的元素很容易。这是示例:
<shared.ui.actionscontentview.ActionsContentView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:actions_layout="@layout/actions"
app:content_layout="@layout/content" />
我对使用ActionsContentView库有任何疑问,我可以在项目Wiki上写一篇小文章。
该库的一些优点:
有一个限制:
最好的问候,史蒂文
对现有实现进行了汇总,并将其转变为一个图书馆项目以及示例应用程序。还添加了XML解析以及对可能存在的操作栏的自动检测,因此它可与本机以及支持的操作栏(如ActionBarSherlock)一起使用。
这也将动作栏滑开!
整个过程是一个库项目以及一个示例应用程序,并在Android滑动菜单(如google和facebook应用程序)中进行了介绍。感谢scirocco的最初想法和代码!
这是简单而优雅的:https : //github.com/akotoe/android-slide-out-menu.git
快照:
我认为该图书馆没有提到:
github url:
https://github.com/jfeinstein10/SlidingMenu
作为我的Android公共库(ACL)的一部分,我实现了自己的SideBar。主要优点:
源代码:https : //github.com/serso/android-common/tree/master/views/src/main/java/org/solovyev/android/view/sidebar
用法:https://github.com/serso/android-common/blob/master/samples/res/layout/acl_view_layout.xml
最近,我从事滑动菜单实现版本的工作。它使用流行的J.Feinstein Android库SlidingMenu。
请在GitHub上检查源代码:
https://github.com/baruckis/Android-SlidingMenuImplementation
将应用直接下载到设备上以尝试:
https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation
因为有注释,所以代码应该是不言自明的。希望对您有所帮助!;)
我找到了最简单的方法及其工作方式。使用简单的Navigation抽屉并调用抽屉.setdrawerListner(),并在下面的drawerSlide方法中使用mainView.setX()方法,或复制我的代码。
xml文件
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000" >
<RelativeLayout
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff">
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:id="@+id/menu"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:src="@drawable/black_line"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/left_drawer"
android:layout_width="200dp"
android:background="#181D21"
android:layout_height="match_parent"
android:layout_gravity="start"
>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
Java文件
public class MainActivity extends AppCompatActivity {
DrawerLayout drawerLayout;
RelativeLayout mainView;
ImageView menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menu=(ImageView)findViewById(R.id.menu);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mainView=(RelativeLayout)findViewById(R.id.content_frame);
menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
drawerLayout.openDrawer(Gravity.LEFT);
}
});
drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
mainView.setX(slideOffset * 300);
}
@Override
public void onDrawerOpened(View drawerView) {
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
}
}
谢谢
我将在这里做出一些大胆的猜测...
我假定它们的布局代表不可见的菜单。轻按菜单按钮时,它们会在顶部对布局/视图进行动画处理,以移动到其他地方,并仅使菜单布局可见。我还没有考虑过这会导致视图中出现任何z-index问题,或者它们如何控制这些问题。
Android添加了导航抽屉。推荐这个
Facebook Android应用程序可能是使用Fragments构建的。菜单是一个片段,深入的活动(Newsfeed / Events / Friends等)是另一个片段。基本上是平板电脑在手机上的“主从细节”布局。
有关信息,由于兼容性库从1.6开始,并且此facebook应用程序也正在具有Android 1.5的设备上运行,因此无法使用Fragments完成。
您可以这样做:创建一个“基本”活动BaseMenuActivity,在其中将onItemClickListener的所有逻辑放入菜单列表,并定义2个动画(“打开”和“关闭”)。在动画的结尾/开头,您显示/隐藏BaseMenuActivity的布局(我们称其为menu_layout)。此活动的布局很简单,它只有一个带有项目的列表+列表右侧的透明部分。该部分将是可单击的,其宽度将与“移动按钮”的宽度相同。这样,您就可以单击此布局以开始动画,以使content_layout向左滑动并占据整个屏幕。对于每个选项(即菜单列表中的项目),您将创建一个“ ContentActivity”,它扩展了BaseMenuActivity。然后,当您单击列表中的一项时,将在菜单可见的情况下启动ItemSelectedContentActivity(活动开始后将立即关闭)。每个ContentActivity的布局均为FrameLayout,包括和。您只需要移动content_layout并在需要时使menu_layout可见。
这是一种方法,我希望我已经足够清楚了。
过去几天,我一直在研究这个问题,最后提出了一个非常简单的解决方案,该解决方案在Honeycomb之前就可以使用。我的解决方案是为我要滑动的View设置动画(FrameLayout
听我说),并听动画的结尾(此时要偏移View的左/右位置)。我在这里粘贴了解决方案:如何为View的翻译制作动画
经过几个小时的搜索,我发现Paul Grime的解决方案可能是最好的解决方案。但是它有太多的功能。因此,对于初学者来说可能很难学习。因此,我想提供我的实现,该实现来自Paul的想法,但它更简单并且应该易于阅读。
我没有在上述答案的任何地方看到令人惊叹的SimonVT / android-menudrawer。所以这是一个链接
https://github.com/SimonVT/android-menudrawer
它超级易于使用,您可以将其放在左侧,右侧,顶部或底部。很好地记录了示例代码和Apache 2.0许可证。
2012年6月,Google在Eclipse ADT插件中添加了“模板”,并且有一个名为“主/详细信息流”的模板可以做到这一点(基于fragmets)