Android Facebook风格幻灯片

Android Facebook风格幻灯片,android,facebook,android-side-navigation,Android,Facebook,Android Side Navigation,新的Facebook应用程序及其导航非常酷。我只是想看看如何在我的应用程序中模拟它 有人知道如何实现这一目标吗 单击左上角按钮,页面幻灯片显示如下屏幕: 我要大胆地猜测一下 我假设他们的布局代表了不可见的菜单。当点击菜单按钮时,它们会在顶部设置布局/视图的动画,以移动到一边,并简单地启用菜单布局的可见性。我没有想到这会在视图中引起任何类型的z索引问题,或者它们是如何控制的。我认为facebook应用程序不是以本机代码编写的,我的意思是,使用Android中的布局,但它们使用了webview,并使

新的Facebook应用程序及其导航非常酷。我只是想看看如何在我的应用程序中模拟它

有人知道如何实现这一目标吗

单击左上角按钮,页面幻灯片显示如下屏幕:


我要大胆地猜测一下


我假设他们的布局代表了不可见的菜单。当点击菜单按钮时,它们会在顶部设置布局/视图的动画,以移动到一边,并简单地启用菜单布局的可见性。我没有想到这会在视图中引起任何类型的z索引问题,或者它们是如何控制的。

我认为facebook应用程序不是以本机代码编写的,我的意思是,使用Android中的布局,但它们使用了webview,并使用了一些javascript ui库,如。使用sencha框架可以很容易地实现


我自己也玩过这个,我能找到的最好的方法就是使用框架布局,在菜单顶部放置一个自定义的水平滚动视图HSV。HSV内部是您的应用程序视图,但有一个透明视图作为第一个子视图。这意味着,当HSV的滚动偏移量为零时,菜单将显示并仍然可以单击

当应用程序启动时,我们将HSV滚动到第一个可见应用程序视图的偏移位置,当我们想要显示菜单时,我们将向后滚动以通过透明视图显示菜单

代码在这里,启动活动中名为HorzScrollWithListMenu和HorzScrollWithImageMenu的底部两个按钮显示了我能想到的最好的菜单:

emulator中滚动屏幕截图:

设备完整滚动的屏幕截图。注意:我的图标没有Facebook菜单图标宽,因此菜单视图和“应用程序”视图没有对齐


我用AbsoluteLayout和一个简单的滑动控制器实现了这一点,该控制器将视图移动到负偏移以隐藏


如果有人感兴趣,我可以整理代码/布局并发布。我知道AbsoluteLayout不受欢迎,但它是一个非常直接的实现。左视图/右视图,滑动打开时,只需将左视图从-X偏移量移动到设备的宽度-右视图的任何显示内容

我在中实现了类似facebook的滑动导航

您可以轻松地将其构建到应用程序、UI和导航中。您只需要实现一个活动和一个片段,让库知道它-库将提供所有需要的动画和导航

在repo中,您可以找到演示项目,以及如何使用lib实现类似facebook的导航

此外,该库应该与ActionBar模式兼容,因为它基于活动事务和TranslateImation,而不是片段事务和自定义视图

目前,最大的问题是使它能够很好地用于支持纵向和横向模式的应用程序。如果您有任何反馈,请通过github提供

祝你一切顺利,
Alex

Facebook Android应用程序可能是用。菜单是一个片段,深入的活动Newsfeed/Events/Friends等是另一个片段。基本上是一款手机上的平板电脑“主控和详细信息”布局。

关于信息,由于兼容性库从1.6开始,并且该facebook应用程序也在安卓1.5设备上运行,因此无法使用碎片

您可以这样做,即: 创建一个基本活动BaseMenuActivity,您可以在其中为菜单列表放置onItemClickListener的所有逻辑,并定义2个动画打开和关闭。 在动画的结尾/开头,您可以显示/隐藏BaseMenuActivity的布局,并将其称为“菜单\布局”。 此活动的布局很简单,它只是一个列表,列表右侧有项目+透明部分。此部分可单击,其宽度与移动按钮的宽度相同。这样,您就可以单击此布局来启动动画,让内容布局向左滑动并占据整个屏幕。 对于每个选项,即菜单列表的项目,您都会创建一个ContentActivity,它扩展了BaseMenuActivity。然后,当您单击列表中的某个项目时,您将启动ItemSelectedContentActivity,并显示一个菜单,一旦活动开始,您将立即关闭该菜单。 每个ContentActivity的布局都是FrameLayout,包括和。您只需移动内容布局,并在需要时使菜单布局可见


这是一种方法,我希望我已经足够清楚了。

还不能对@Paul Grime给出的答案发表评论,无论如何,我已经在他的github项目中提交了闪烁问题的修复

我会在这里发布修复,也许有人需要它。您只需要添加两行代码。anim.setAnimationListener调用下面的第一个调用:

anim.setFillAfter(true);
以及app.layout调用之后的第二个:

app.clearAnimation();
希望这有助于:< /p> 这是lib,在我看来似乎是最好的。不是我写的

更新:

这段代码似乎最适合我,它移动了整个Actionbar,类似于G+应用程序


在过去的几天里,我一直在研究这个问题,我终于想出了一个非常简单的解决方案,它在蜂巢之前就可以工作了。我的解决方案是为我要滑动的视图设置动画FrameLayout,并侦听动画的结尾,在该点偏移视图的左/右位置。我已经将我的解决方案粘贴到这里:

我刚刚为我自己的项目实现了类似的视图。你可以查一下

下面是基于我编写的库的示例应用程序的屏幕:

很容易将此自定义视图用作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库的使用有任何疑问,我可以在ProjectsWiki上写一篇小文章

此库的一些优点:

能够通过触摸滑动视图 在XML中很容易调整操作栏的大小 支持2.0及以上版本的所有Android SDK 有一个限制:

所有水平滚动视图都不会在此视图的边界上工作 致以最良好的祝愿, Steven对一个应用程序进行了总结,并将其转化为一个图书馆项目和示例应用程序。还添加了XML解析以及自动检测可能存在的actionbar,因此它可以与本机以及支持ActionBarSherlock等操作栏一起使用

这一个也可以滑动动作条

整个过程是一个图书馆项目和一个示例应用程序,在上进行了描述。感谢您提供了最初的想法和代码


经过几个小时的搜索,我发现保罗·格里姆的解决方案可能是最好的。但是它有太多的功能。所以对于初学者来说学习可能很难。因此,我想提供我的实现,这是来自保罗的想法,但它更简单,应该很容易阅读


2012年6月,有一个名为master/detail flow的模板,它完全基于fragmets实现了这一点,它既简单又优雅:

快照:


这是另一个非常好的开源库

这一款的优点在于它可以很容易地与ActionBarSherlock集成

这是项目链接


这里是下载链接

我没有看到上面答案中提到的令人惊叹的SimonVT/android menudrawer。这里有一个链接


它超级容易使用,你可以把它放在左边,右边,顶部或底部。使用示例代码和Apache2.0许可证进行了很好的文档记录

我想图书馆没有提到:

/

github url:

与动作栏ActionBarSherlock配合使用效果很好,有助于向后兼容! 支持右侧滑动,而不仅仅是通过按钮滑动!
作为我的Android公共库ACL的一部分,我实现了自己的侧栏。 主要优点:

侧杆可以设置为任何位置:左、上、下、右 主视图和滑动视图都可以单击 可以部分显示侧栏 侧边栏的可设置样式的属性使更改其样式更加容易 maven repo中的人工制品 大图书馆的一部分 源代码:

用法:

您好,这是提供类似facebook的幻灯片的最佳示例演示应用程序 菜单检查代码


android支持包2013年5月13日修订版提供了抽屉布局,用于创建可从窗口边缘拉入的导航抽屉。而且,导航抽屉现在是一种设计模式


最近,我一直在开发我的滑动菜单实现版本。它使用流行的J.Feinstein Android库滑动菜单

请在GitHub上查看源代码:

将应用程序直接下载到设备以尝试:


由于注释的存在,代码应该是自解释的。我希望这会有帮助

Android添加了导航抽屉。参考此


这是android官方文档中的设计和开发指南,无需添加非官方的外部库。只有android支持库可以。在这里找到链接


而且。

我找到了一种最简单的方法来实现它和它的工作。使用简单导航抽屉并调用drawer.setdrawerListner,在下面的抽屉滑动方法中使用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>

如果您使用过该应用程序,谢谢您。

。。你可以看到布局向右滑动,让位于菜单部分。我会试着制作一个视频并上传。我用的是iPhone版本,如果Android版本是一样的,那么我怀疑它和我描述的有很大不同。我没有在Android上写过很多动画,所以我无法告诉你动画代码是什么样子的,但粗略地说,我想这就是我描述的。谢谢,这在iPhone上也是一样的效果。是的,视频也会很有帮助,为了了解确切的效果。@bool.dev这里有一段视频:@HarshaMV:-试试看这个帖子。我想可能会对你有所帮助。关于

在Android中滑出导航-。必须阅读。我已经实现了我自己的滑动菜单,请看这里+1用户界面可以在不更新应用程序的情况下更改,因此它肯定是一个web应用程序,而android应用程序基本上是一个web浏览器。我不确定这是否一定是这样。UI的框架可以是本机的,例如实际的菜单视图和其他本机视图,以及动态加载这些视图的内容。如果应用程序的框架发生变化,那么可能需要更新。我不认为facebook应用程序是一个网络应用程序。太流利,太快。我知道web/hybrid应用程序看起来很像native,但与native相比还是有点滞后。不仅仅是骨架-列表、地图等看起来和感觉都是本地的。至少就目前的技术状况而言。好吧,有人告诉我这个应用程序在大约2个月内都不是这样的-所以你指的是一个我不知道的旧版本。无论如何,评论当前应用肯定是本地应用可能是有益的。@AmokraneChentir您可以通过在非菜单活动中调用getDrawingCache并从位图创建ImageView来使用不同的活动。然后调用StartActivityContent&overridePendingTransition0,ClickListenerForScrolling类的onClick方法中的0,以立即显示新活动并获得所需效果。我想知道自定义的HorizontalScrollView是否可以与ListView一起使用,因为HorizontalScrollView的官方文档提到它将强制ListView显示其全部项目。fork在不使用片段的情况下切换活动!感谢您的帮助,我能够使用HorzScrollWithListMenu.java。非常感谢@PaulGrime…这是一个很好的简单示例,最棒的是在这个演示中,简单易懂,易于定制,没有库项目可供使用。您好,我刚刚发现,每次打开侧边栏时,您的方法都会创建一个大屏幕截图位图。这将增加堆大小,并可能导致内存不足错误。感谢亲爱的korovyansk,这非常好。但是绝对布局在新的OSs中被弃用。你能重新编码吗?感谢所有在github或这里给出反馈的人。我知道一些错误,并有一些如何使应用程序更好的想法。当我有空的时候,我能做到。嗨,科罗扬斯克。我正在使用你的图书馆,它工作得很好。但是我有一个小问题。当幻灯片栏列表打开时,我正在启动listview项目上的活动单击。活动开始正确,但幻灯片动画不起作用。代码菜单活动getActivity.GetSlideOutThelper.close;StartActivityNewIntentGetActivity,MyActivity.class.AddFlagsInt.FLAG\u ACTIVITY\u CLEAR\u TOP.putExtracategory,position;在您的情况下,新活动将立即打开,而无需等待动画结束,您可以尝试扩展库并为动画结束添加回调。也许我会将此功能添加到下一版本的库中。如果您不需要绝对布局,我将不胜感激!谢谢我写了这个图书馆,很高兴你喜欢。现在这是最基本的,但我会在接下来的几周里改进它。非常欢迎其他人也对它进行修改。这个图书馆真是太棒了。它的使用非常简单,工作非常完美。非常感谢。我想补充一点,我认为这个样本只适用于ICS和蜂巢。。但是这个库可以一直运行到2.1版本,我使用它没有问题。不错,它非常简单,但运行良好,安装速度非常快。但是,从库外部进行配置并不十分方便:所有项目都有相同的简单布局,并且在运行中不可能动态列出;这两件事都很容易适应,但我真的需要在列表中分组,这不会那么容易。如何设置第一个用户界面作为你的上传图片?我测试它的第一个UI是屏幕上的webView。我希望应用程序启动时显示listview。通过你的lib是2.0,但是你的演示是4.0,我希望你也能使用2.0cool@pengwang:我刚刚推送了一些代码来支持此功能。通过调用viewActionsContentView.showActions,可以在Activity.onResume时执行此操作;是否可以禁用隐藏零件上的触摸事件?例如,当右侧部分处于活动状态时,右侧的所有视图都将被禁用。在显示操作1时,可能会阻止内容布局。我给你发了一封电子邮件,里面有一个示例项目。在这种情况下,我们需要在片段中制作actionbar,所以我们不能使用Android框架的任何功能来构建它,对吗?事实上,我不能肯定facebook,但对于许多开发者来说,在没有框架帮助的情况下制作actionbar太难了,我希望这一次已经结束了。你能帮我吗??与滑块相关的问题。。这是一个链接,它能让你通过触摸滑动吗?意思是swipe@Edward我一直在使用您的示例,我认为它非常好用,但遇到了一个问题,当旋转屏幕时,我使用的是android:configChanges=android 3.1清单中的方向,因为我不希望重新启动活动屏幕旋转良好,但是
框架布局保持了它的大小,看起来不太好,你有办法解决这个问题吗?我什么都试过了,但修不好。thanks@Edward这是我的问题,使用您的样品,请帮助我或给我一些建议谢谢。主/详细流程不是有问题的侧栏菜单。它只是两个片段一起显示在平板电脑上或分别显示在手机上。2013年6月,添加了导航抽屉布局,这与此处的需求更为相似,但ActionBar不会像Facebook风格的滑块一样随抽屉滑动。是的,支持的最低API级别为4。兼容性库允许您在旧设备上使用它。我刚刚为姜饼和后来的产品开发了一款。这需要在顶部做得更进一步。其他答案中有太多无关的第三方库。这一个:
   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) {

        }
    });
 }
}