SlidingDrawer在开始时半开

我正在处理我的应用程序,我想知道是否可以将滑动抽屉部分打开而不是完全关闭,这样用户可以在单击显示更多按钮之前在文本内容达到峰值,这将显示其余部分的文字。

提前致谢。

我遇到了类似的问题,最后我修改了SlidingDrawer,以便在Drawer折叠/关闭时显示部分内容。 使用SemiClosedSlidingDrawer,您可以使用维度属性“semiClosedContentSize”指定应在折叠/关闭模式下显示的内容屏幕数量:

 

然后你的attrs.xml(在res / values /中)也需要包含:

           

,其中’se.smartrefill.app.x’指的是AndroidManifest中定义的应用程序包。

此特定SlidingDrawer(上图)配置为使用水平方向,内容视图的40dp宽(和fill_parent高)条带将以折叠/关闭模式显示(向右)。 在扩展/打开模式下,此实现将像标准SlidingDrawer一样工作,但在折叠/关闭模式下,内容屏幕永远不会被完全隐藏(除非您指定semiClosedContentSize =“0dp”,这将把它变成标准的SlidingDrawer)。 此实现基于Android-4(“1.6”)中SlidingDrawer的实现,但兼容(包括)Android-14(“4.0”)。 此实现也应该与Android的未来版本兼容(在API 4和API 14之间的SlidingDrawer几乎没有任何变化)。 此实现支持垂直和水平方向。

试试看!

此致,雅各布

我遇到了和你一样的问题。 一开始我只需要在我的滑动抽屉中有一个(相当窄的)列表视图,这样用户就可以在内容中找到一个高峰。 仅当选择列表中的项目时,抽屉才应完全打开,并且该项目的某些内容将显示在列表视图旁边的图像视图中。

因此我的抽屉布局是这样的:

           

所以在开始时图像视图消失了。 在我的列表视图的OnItemClickListener中,我控制抽屉的布局参数:

 private OnItemClickListener onItemClickListener = new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { if (imageView.getVisibility() == View.GONE) { ExpandViewAnimation animation = new ExpandViewAnimation(drawerContainer, ((View) drawerContainer.getParent()).getWidth()); animation.setDuration(500); drawerContainer.setAnimation(animation); animation.start(); imageView.setVisibility(View.VISIBLE); } //code for displaying an image in the imageview } }; 

如您所见,我正在使用我的自定义动画作为抽屉容器,以便保留开放滑动抽屉的优势。 这是动画类:

 public class ExpandViewAnimation extends Animation { int targetWidth; int initialWidth; View view; public ExpandViewAnimation(View view, int targetWidth) { this.view = view; this.targetWidth = targetWidth; initialWidth = view.getWidth(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { int newWidth = initialWidth + (int) ((targetWidth - initialWidth) * interpolatedTime); LayoutParams lp = new LayoutParams((LayoutParams) view.getLayoutParams()); lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); view.setLayoutParams(lp); view.getLayoutParams().width = newWidth; view.requestLayout(); if (newWidth == targetWidth) { LayoutParams matchParentParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); view.setLayoutParams(matchParentParams); view.clearAnimation(); } } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); } @Override public boolean willChangeBounds() { return true; } } 

我设置新布局参数的原因是因为在开始时我将保存初始参数集(如在布局文件中)并将其应用回onDrawerClose:

 private OnDrawerCloseListener onDrawerCloseListener = new OnDrawerCloseListener() { @Override public void onDrawerClosed() { imageView.setVisibility(View.GONE); imageView.setImageDrawable(null); drawerContainer.setLayoutParams(initialLayoutParams); } }; 

如果您希望用户能够通过手柄上的滑动移动完全打开抽屉,则可以在onTouchListener中应用类似的动画。

最后一句话:我的滑动抽屉在布局中,因为它包含在该布局中,因此抽屉可以在几个地方访问。 通常,您的抽屉周围不需要布局。

也许尝试像设置滑动抽屉的内在内容之类的东西

      ... more stuff    

然后设置按钮ShowMore以切换View.GONE和View.VISIBLE之间的线性布局“更多”的可见性

**编辑:嗯重新阅读你的问题,我实际上有点困惑:标题是“开始时打开”,但是你说“部分打开”。 你想让它在部分开放的状态下开始吗? 或当用户拖动它时部分打开? 我的建议(未经测试)是将滑动抽屉的大小包装到内容中,并让内容最初从小开始显示按钮+任何你想在“更多”内部线性布局之外显示的内容,然后显示它们的时候单击按钮。

我最近开发了应用程序,其中我有您要求的要求。 通过谷歌搜索我发现我们修改了原始Sliding Drawer的源代码我做了那个并且整个修改过的代码和我在一起我已经测试过并且工作正常。 我可以发给你整个文件。只要给我你的电子邮件ID。
您还需要在项目的values文件夹中使用attrs.xml,以便使用此代码。 attrs.xml代码发布在下面。

        

我希望这能帮到您。