ChatGPT解决这个技术问题 Extra ChatGPT

Android Facebook 样式幻灯片

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

任何人都知道如何实现它?

https://i.stack.imgur.com/wmQtc.jpg

单击左上角按钮时,页面滑动并显示以下屏幕:

https://i.stack.imgur.com/hbZD7.jpg

YouTube Video

是的,视频也会有所帮助,以了解确切的效果。
@bool.dev 这里是视频:youtube.com/watch?v=ANLMaL7zn20
@HarshaMV:- 试试看这个帖子。我想可能会对你有所帮助。stackoverflow.com/questions/8453320/…
关于 Android 中的滑出式导航的非常好的文章 - androiduipatterns.com/2012/06/…。必读。
我已经实现了自己的滑动菜单,请参见此处stackoverflow.com/a/15880375/1939564

o
onkar

我自己玩过这个,我能找到的最好的方法是使用 FrameLayout 并在菜单顶部放置一个自定义的 HorizontalScrollView (HSV)。 HSV 内部是您的应用程序视图,但有一个透明视图作为第一个子视图。这意味着,当 HSV 的滚动偏移为零时,菜单将显示出来(并且仍然可以令人惊讶地单击)。

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

代码在这里,Launch 活动中的底部两个按钮(称为 HorzScrollWithListMenu 和 HorzScrollWithImageMenu)显示了我能想到的最佳菜单:

Android sliding menu demo

模拟器的屏幕截图(中滚动):

https://i.stack.imgur.com/ck9hD.png

设备截图(全滚动)。请注意,我的图标没有 Facebook 菜单图标那么宽,因此菜单视图和“应用程序”视图没有对齐。

https://i.stack.imgur.com/PHmtw.png


@AmokraneChentir 您可以通过在非菜单活动中调用 getDrawingCache() 并从位图创建 ImageView 来使用不同的活动。然后调用 startActivity(intent) & overridePendingTransition(0, 0)ClickListenerForScrolling 类的 onClick 方法中立即显示新活动并获得所需的效果。
我想知道自定义的 HorizontalScrollView 是否可以与 ListView 一起使用,因为 HorizontalScrollView 的官方文档提到它将强制 ListView 显示其整个项目。
this fork 在不使用片段的情况下切换活动!
感谢您的帮助,我能够使用 HorzScrollWithListMenu.java。
非常感谢@PaulGrime ...这是一个非常简单的示例,最棒的是在这个演示中简单易懂且易于定制,并且没有可使用的库项目。
A
AlexKorovyansky

我在 this library project 中实现了类似 facebook 的滑出式导航。

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

在 repo 中,您可以找到演示项目,其中包含如何使用 lib 实现类似 facebook 的导航。 Here is short video with record of demo project

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

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

一切顺利,亚历克斯


嗨,我刚刚发现您的方法是每次打开侧边栏时都会创建一个大屏幕截图位图。它会增加堆大小并可能导致内存不足错误。
谢谢亲爱的科罗维扬斯克,它非常好。但在新操作系统中不推荐使用绝对布局。你能重新编码吗?
感谢所有在 github 或此处提供反馈的人。我知道一些错误并有想法如何使应用程序更好。我做到了,什么时候我有空闲时间。
嗨科罗扬斯克。我正在使用你的图书馆,它运作良好。但我有一个小问题。当滑动条列表打开时,我正在单击列表视图项上启动活动。活动开始正确,但滑入动画不起作用。代码 ((MenuActivity) getActivity()).getSlideoutHelper().close(); startActivity(new Intent(getActivity(), MyActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtra("category", position));
在您的情况下,新活动将立即打开而无需等待动画结束,您可以尝试扩展库并为动画结束添加回调。可能我会将此功能添加到下一个版本的库中。
C
Community

这是 another lib,在我看来似乎是最好的。我没写。。

更新:

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

How did Google manage to do this? Slide ActionBar in Android application


我写了这个库,很高兴你喜欢它。它现在真的很基础,但我会在接下来的几周内改进它。非常欢迎其他人也对其进行更改。
这个图书馆真是太棒了。它使用起来非常简单,而且效果很好。谢谢你。我只想补充一点,该示例仅适用于 ICS(我认为还有 Honeycomb).. 但该库一直可以使用到 2.1,我使用它没有问题。
不错,它非常简单,但效果很好,而且设置非常快。但是,从库外部不是很可配置:所有项目都具有相同的简单布局,并且在旅途中没有动态列表的可能性;这两件事都很容易适应,但我真的需要在列表中分组,这并不容易。
a
alex

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

https://i.stack.imgur.com/hDV6A.jpg


+1 UI可以在没有应用更新的情况下改变,所以它绝对是一个网络应用程序,而安卓应用程序基本上是一个网络浏览器。
我不确定这一定是这样。 UI 的骨架可以是原生的(例如,实际的菜单视图和其他原生视图),并且这些视图的内容是动态加载的。如果应用程序的框架发生更改,则可能需要进行更新。
我不认为 facebook 应用程序是 web 应用程序。太流利了,快。我知道网络/混合应用程序看起来“像原生”一样好,但与原生相比仍有一些滞后。不仅骨架 - 列表、地图等看起来和感觉都是原生的。至少在目前的技术状态下。
好的,有人告诉我,这个应用程序在大约 2 个月内不是这样的 - 所以你指的是我不知道的旧版本。无论如何,评论当前应用程序绝对是本机的可能会提供信息。
d
dwbrito

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

这个很好的特点是它很容易与 ActionBarSherlock 集成。

这是 github 项目链接

这是 Google Play 下载链接


o
onkar

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

https://i.stack.imgur.com/G5NJ1.jpg

将此自定义视图用作 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 中调整操作栏的大小很容易

支持从 2.0 及以上的所有 Android SDK 版本

有一个限制:

所有水平滚动视图都不会在此视图的范围内工作

最好的问候,史蒂文


如何将第一个 UI 设置为您的上传图片?我测试它的第一个 UI 是屏幕上的 webView。我希望应用程序启动时显示列表视图。通过你的库是2.0,但你的演示是4.0,我希望你也可以使用2.0。那很酷
@pengwang:我刚刚推送了一些代码来支持这个功能。您可以在 Activity.onResume() 时通过调用 viewActionsContentView.showActions() 来执行此操作;
是否可以禁用隐藏部分的触摸事件?例如,当右侧部分处于活动状态时,右侧的所有视图都将被禁用。
显示操作一时可能会阻止内容布局。我已经通过电子邮件向您发送了一个示例项目。
W
Wubao Li

使用 android 支持包修订版 13(2013 年 5 月),有 DrawerLayout 用于创建可以从窗口边缘拉入的导航抽屉。而且,导航抽屉现在是一种设计模式。

v4 support library

navigation drawer design pattern


是的,支持的最低 API 级别为 4。
兼容性库可让您在旧设备上使用它。我刚刚为 Gingerbread 和后来开发了一个。
这需要在顶部进一步。其他答案中有太多无关的第三方库。
C
Community

existing implementation 进行了总结,并将其变成了一个库项目和示例应用程序。还添加了 XML 解析以及对可能存在的操作栏的自动检测,因此它可以与本机以及支持操作栏(如 ActionBarSherlock)一起使用。

这也将操作栏滑开!

整个内容是一个库项目以及一个示例应用程序,并在 A sliding Menu for Android like google and facebook apps 中进行了描述。感谢 scirocco 提供最初的想法和代码!

https://i.stack.imgur.com/sa6ej.png


E
Edward

这是简单而优雅的:https://github.com/akotoe/android-slide-out-menu.git

快照:

https://i.stack.imgur.com/XQu4x.png


你能帮助我吗??与滑块相关的问题.. 这是链接 stackoverflow.com/questions/14500927/…
它会让你通过触摸滑动吗? (平均滑动)
@Edward我一直在使用您的示例,我认为它很棒且易于使用,但是在旋转屏幕时遇到了问题(我在android 3.1的清单中使用 android:configChanges="orientation" 因为我没有想要重新启动活动)屏幕旋转正常但框架布局保持其大小并且看起来不太好,你有办法解决这个问题吗?我已经尝试了一切,但无法修复它。谢谢
@Edward 这是我使用您的示例的问题,请帮助我或给我一些建议,谢谢。 stackoverflow.com/questions/16778911/…
m
madlymad

我认为该库没有提到:

jfeinstein10 / SlidingMenu

github url:https://github.com/jfeinstein10/SlidingMenu

与有助于向后兼容的操作栏 ActionBarSherlock 配合使用效果很好!

支持右滑,而不仅仅是通过按钮滑动!


F
Fatal1ty2787

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

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

anim.setFillAfter(true);

app.layout() 调用后的第二个:

app.clearAnimation();

希望这可以帮助 :)


R
Rich

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

如果有人感兴趣,我可以清理代码/布局并发布。我知道 AbsoluteLayout 已被弃用,但它是一个非常直接的实现。左视图/右视图,当“滑动打开”时,只需将左视图从 -X 偏移量移出到设备的宽度 - 无论你想显示什么右视图


如果您可以在没有 AbsoluteLayout 的情况下做到这一点,我会很感激!谢谢!
M
Mukesh Y

你好,这是最好的示例演示应用程序,它提供像幻灯片菜单一样的 facebook。在此处检查代码

https://i.stack.imgur.com/RIpYY.jpg

https://i.stack.imgur.com/BSfox.jpg


s
se.solovyev

作为我的 Android 公共库 (ACL) 的一部分,我实现了自己的 SideBar。主要优点:

侧边栏可以设置到任何位置:左,上,下,右主视图和滑动视图都可以点击侧边栏可以部分显示侧边栏的样式属性使其更容易改变它的样式在maven repo中的工件大图书馆的一部分

源代码: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


A
Andrius Baruckis

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

请查看 GitHub 上的源代码:

https://github.com/baruckis/Android-SlidingMenuImplementation

直接下载app到设备上试试:

https://play.google.com/store/apps/details?id=com.baruckis.SlidingMenuImplementation

由于注释,代码应该是不言自明的。我希望它会有所帮助! ;)


D
Dalvinder Singh

我找到了一种最简单的方法及其工作方式。使用简单的导航抽屉并调用drawer.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>

文件

   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) {

        }
    });
 }
}

https://i.stack.imgur.com/PNAi8.png

谢谢你


j
jlindenbaum

我将在这里做一些大胆的猜测......

我假设他们有一个代表不可见菜单的布局。当点击菜单按钮时,它们会为顶部的布局/视图设置动画以移开,并简单地启用菜单布局的可见性。我没有想过这会导致视图中出现任何类型的 z-index 问题,或者他们如何控制它。


如果您使用过该应用程序.. 您实际上可以看到布局向右滑动,让位于菜单部分。我会尝试制作视频并上传。
我用的是iPhone版本,如果安卓版本是一样的,那我怀疑和我描述的有很大不同。我没有在 Android 上写过很多动画,所以我无法告诉你动画代码是什么样的,但粗略地说,我假设它就是我所描述的。
谢谢,youtube.com/watch?v=ANLMaL7zn20 在 iPhone 上效果一样吗?
D
Deepak Goel

Android 添加了导航抽屉。参考这个

link


j
jai_b

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

designdevelop


o
onosendai

Facebook Android 应用程序可能是使用 Fragments 构建的。菜单是一个片段,深入的活动(新闻源/事件/朋友等)是另一个片段。基本上是平板电脑'master &手机上的详细布局。


在这种情况下我们需要在fragment中制作actionbar,所以我们不能使用Android框架的任何特性来构建它,对吧?实际上我不能确定facebook,但是对于许多开发人员来说,在没有框架的帮助下制作actionbar太难了,我希望这个时间已经结束了。
p
p4u144

对于信息,由于兼容性库从 1.6 开始,并且这个 facebook 应用程序也在 Android 1.5 的设备上运行,因此无法使用 Fragments 完成。

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

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


C
Community

在过去的几天里,我一直在玩这个,我想出了一个最终非常简单的解决方案,并且可以在 Honeycomb 之前使用。我的解决方案是为要滑动的视图设置动画(对我来说是 FrameLayout)并监听动画的结束(此时偏移视图的左/右位置)。我在此处粘贴了我的解决方案:How to animate a View's translation


C
Community

经过几个小时的搜索,我发现 Paul Grime 的解决方案可能是最好的解决方案。但是它的功能太多了。所以对于初学者来说可能很难学习。所以我想提供我的实现,它来自 Paul 的想法,但它更简单,应该易于阅读。

implementation of side menu bar by using java code without XML


l
lwegener

我没有在上述答案的任何地方看到令人惊叹的 SimonVT/android-menudrawer。所以这里有一个链接

https://github.com/SimonVT/android-menudrawer

它超级易于使用,您可以将其放在左侧、右侧、顶部或底部。使用示例代码和 Apache 2.0 许可证很好地记录了文档。


r
rds

2012 年 6 月,Google has added "templates" in the Eclipse ADT plugin,有一个名为“master/detail flow”的模板正是这样做的(基于片段)


主/详细信息流不是有问题的侧边栏菜单。它只是两个片段一起显示(平板电脑)或分开显示(手机)。
嗯,2013 年 6 月,添加了 Navigation Drawer Layout,这和这里需要的比较相似,但是 ActionBar 不会像 Facebook 样式的滑块那样随抽屉滑动。