我做过不同的导航抽屉类型,如Permanent,Persistent 迷你变种,临时。
它们的轮廓形状都是矩形,如下所示。
要求:我想创建一个带有弯曲边缘的导航抽屉(在右侧)。
让我们看看我的导航。图
<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:headerLayout
和app:menu
。如果我可以更改父NavigationView
个边缘,则app:headerLayout
和app:menu
将显示在其父级边界内。我是对的吗?
android:background
的更改对我没有用。
如果在dimen
中添加dimens.xml
,我可以使用哪些属性?
是否可以曲线导航抽屉的边缘(以编程方式或使用图像)?
如果是,任何指导都将受到高度赞赏。
答案 0 :(得分:7)
最后,我决定为此案例创建库:https://github.com/rom4ek/ArcNavigationView,随意浏览并使用它:)它基于Florent Champigny's ArcLayout,并进行了一些调整,谢谢他。
建议使用这个lib的优点是它是从android设计库中标准NavigationView
的构建的,你可以照常使用它,只需更改类名即可。希望很快就会在 jcenter 上发布。以下是一些截图:
感谢您的想法! :)
答案 1 :(得分:6)
这个Lib可以帮助你
如何使用: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() {
}
});
答案 2 :(得分:2)
据我所知,要实现这一点,你必须像在DrawerLayout类中一样创建自己的自定义类,扩展ViewGroup(或FrameLayout)。
EX:
android:scaleType="centerInside"
在自定义类中,您可以使用Canvas和Paint绘制首选形状。您可以覆盖以您的方式实现它的方法。
然后你可以在你的Activity中使用它:
public class DrawerLayout extends ViewGroup implements DrawerLayoutImpl {
/*
..
*/
}
在您的activity_file.xml中:
MyDrawerLayout drawer = (MyDrawerLayout) findViewById(R.id.my_drawer_layout);
答案 3 :(得分:0)
从上面的库中使用它:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<com.rom4ek.arcnavigationview.ArcNavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:fitsSystemWindows="true"
app:menu="@menu/activity_main_drawer"
app:itemBackground="@android:color/white"
app:headerLayout="@layout/nav_header_main"
app:arc_cropDirection="cropInside"
app:arc_width="96dp"/>