2016-12-26 108 views
11

我已经完成了不同的导航抽屉类型,如永久,持久 迷你变体,临时。在android中的弧形边缘导航抽屉

它们都是像下面那样的轮廓形状的矩形。

enter image description here


要求:我想创建一个导航抽屉具有弯曲边缘(在其右侧)。

enter image description here

让我们在我的资产净值看看。鉴于

<android.support.design.widget.NavigationView 
      android:background="#FFF" 
      android:id="@+id/nav_view" 
      android:layout_width="wrap_content" android:layout_height="match_parent" 
      android:layout_gravity="start" android:fitsSystemWindows="true" 
      app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer"/> 

它包含app:headerLayoutapp:menu。如果我可以更改父亲NavigationView边缘,那么app:headerLayoutapp:menu将显示在其父边界内。我对吗 ?

更改android:background对我无效。


怎么样在dimens.xml添加dimen是没有办法,我可以使用任何属性?

是否可以曲线导航抽屉的边缘(以编程方式或使用图像)?

如果是的话,任何指导将不胜感激。

+0

顺便说一句,这不是一个项目的要求,我只是对它感兴趣..所以我不急于..将是伟大的创造这种导航!是不是?如果你有一个想法可以随意分享知识:)) –

+1

有一个美丽的图书馆,当打开抽屉时具有弯曲的边缘效果,但不是静态的:)也许这对你很有趣https: //github.com/mxn21/FlowingDrawer – rom4ek

+0

@ rom4ek虐待它试试感谢:)) –

回答

6

最后,我决定为这种情况下创建库:https://github.com/rom4ek/ArcNavigationView,随意浏览并使用它:)它是基于Florent Champigny's ArcLayout,有一些调整,这要归功于他。

这个LIB超过建议的优点是,它是建立在从Android的设计库标准NavigationView顶部,你可以使用它像往常一样,只是改变了类名。希望很快会在jcenter上公布。下面是一些截图:

感谢您的想法! :)

+0

我认为这应该是被接受的答案,甚至在测试它的工作之前 - 你做了你应该得到的不仅仅是赏金:))也谢谢 –

+0

忘记接受xoxo –

2

根据我的说法,为了达到这个目的,您必须使您自己的自定义类扩展ViewGroup(或FrameLayout),就像我们在DrawerLayout类中一样。

EX:

public class DrawerLayout extends ViewGroup implements DrawerLayoutImpl { 
/* 
.. 
*/ 
} 

在您的自定义类,你可以使用Canvas和涂料来绘制您首选的形状。你可以重写这些方法以你的方式实现它。

然后你可以使用它自己的活动中:

MyDrawerLayout drawer = (MyDrawerLayout) findViewById(R.id.my_drawer_layout); 

在你activity_file。XML:

<com.yourpackage.MyDrawerLayout 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/my_drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

<!-- .... --> 

</com.yourpackage.MyDrawerLayout> 
+0

嘿谢谢你回答这个问题:) –

6

这可能库帮助你

https://github.com/mzule/FantasySlide

如何使用:XML

<com.github.mzule.fantasyslide.FantasyDrawerLayout xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="centerCrop" 
    android:src="@drawable/fake" />// this image is part of home scren 

<com.github.mzule.fantasyslide.SideBar 
    android:id="@+id/leftSideBar" 
    android:layout_width="200dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@color/colorPrimary" 
    app:maxTranslationX="66dp"> // This attribute is for curve 

    <!-- SideBar --> 

</com.github.mzule.fantasyslide.SideBar> 

JAVA:

SideBar leftSideBar = (SideBar) findViewById(R.id.leftSideBar); 
leftSideBar.setFantasyListener(new SimpleFantasyListener() { 
    @Override 
    public boolean onHover(@Nullable View view) { 
    return false; 
    } 

    @Override 
    public boolean onSelect(View view) { 
    return false; 
    } 

    @Override 
    public void onCancel() { 
    } 
}); 
+0

是图像视图帮助创建抽屉?任何通过调整属性来获取自定义形状的方法? –

+0

哪个图片?你在问? – MilapTank

+0

@ drawable/false one,反正我喜欢那个+1 –