2016-12-26 9 views
11

Ich habe verschiedene Navigation Schubladenarten wie Permanent, Persistent Mini-Variante, Temporary getan.Navigationsschublade mit curverd Kante in android

Alle von ihnen sind Rechteck in ihrer Umrissform wie unten.

enter image description here


Requirement: Ich mag eine Navigations Schublade mit einer gekrümmten Kante (in der rechten Seite) zu schaffen.

enter image description here

Lassen Sie uns auf mein nav einen Blick. Ansicht

<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"/> 

Es enthält app:headerLayout und ein app:menu. Wenn ich die Eltern NavigationView Kanten diese app:headerLayout ändern kann und app:menu wird innerhalb seiner Eltern Grenzen angezeigt werden. Habe ich recht ?

Änderung der android:background hat nicht für mich funktioniert.


Was über das Hinzufügen von dimen in dimens.xml ist es eine Eigenschaft, die ich verwenden kann?

Ist es möglich, Navigationsleiste (programmgesteuert oder mit einem Bild) zu krümmen?

Wenn ja irgendeine Anleitung sehr geschätzt wird.

+0

Btw das ist kein Projekt Anforderung ich bin nur daran interessiert..so ich bin nicht in Eile .. wird toll sein, um diese Art von Navigation zu erstellen! Ist es nicht? Wenn Sie eine Idee haben, fühlen Sie sich frei, das Wissen zu teilen :)) –

+1

Es gibt eine schöne Bibliothek, die gekrümmten Rand-Effekt beim Öffnen der Schublade hat, aber nicht statisch :) Vielleicht wäre es für Sie interessant https: //github.com/mxn21/FlowingDrawer – rom4ek

+0

@ rom4ek krank geben Sie es einen Versuch Danke :)) –

Antwort

6

Schließlich habe ich beschlossen, Bibliothek für diesen Fall zu erstellen: https://github.com/rom4ek/ArcNavigationView, fühlen sich frei, es zu erforschen und zu nutzen :) Es auf Florent Champigny's ArcLayout basiert, mit einigen Anpassungen, dank ihm.

Der Vorteil dieser lib über vorgeschlagen ist, dass es auf von Standard NavigationView von Android Design-Bibliothek gebaut wurde, und Sie es wie gewohnt nutzen können, nur die Klassennamen ändern. Hoffentlich wird bald auf jcenter veröffentlicht werden. Hier sind einige Screenshots:

Danke für die Idee! :)

+0

Ich denke, das sollte die akzeptierte Antwort sein, noch bevor Sie es für die Arbeit testen - Sie haben getan, dass Sie mehr verdienen als eine Prämie :)) Danke auch –

+0

hat vergessen, diesen xoxo zu akzeptieren –

2

Laut mir, um dies zu erreichen, müssen Sie Ihre eigene benutzerdefinierte Klasse erstellen, die ViewGroup (oder FrameLayout) erweitert, wie wir es in der DrawerLayout-Klasse haben.

EX:

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

In Ihrer benutzerdefinierten Klasse, können Sie Leinwand verwenden und Bemalen Sie bevorzugte Form zu zeichnen. Sie können die Methoden auf Ihre Weise implementieren.

Dann können Sie es in Ihrer Aktivität verwenden:

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

In Ihrem 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

Hey vielen Dank für die Beantwortung der Frage :) –

6

Diese Lib kann er hilft Ihnen

https://github.com/mzule/FantasySlide

So verwenden: 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

ist diese Bildansicht geholfen, die Schublade zu erstellen? Gibt es irgendeine Möglichkeit, benutzerdefinierte Formen zu erhalten, indem Sie ein Attribut anpassen? –

+0

Welches Bild? du fragst ? – MilapTank

+0

@ Drawable/Fake One, auf jeden Fall mag ich das +1 –

Verwandte Themen