先上效果图:
布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_with_view_pager"
style="@style/title_all"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/sys_bg">
<android.support.design.widget.BottomNavigationView
android:id="@+id/ma_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
app:itemBackground="@null"
app:menu="@menu/menu_navigation_guide" />
<FrameLayout
android:id="@+id/ma_frame_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/ma_navigation"
android:background="@color/white" />
<LinearLayout
android:layout_width="80dp"
android:layout_height="40dp"
android:layout_above="@+id/ma_navigation"
android:layout_centerHorizontal="true"
android:layout_marginBottom="-5dp"
android:background="@drawable/round_circle_white"
android:elevation="8dp" />
<ImageView
android:id="@+id/ma_iv_index"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="30dp"
android:elevation="8dp"
android:scaleType="centerInside"
android:src="@mipmap/main_index" />
</RelativeLayout>
关键背景:round_circle_white.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size
android:width="80dp"
android:height="40dp" />
<stroke
android:width="1px"
android:color="@color/color_general_line" />
<solid android:color="@color/white" />
<corners
android:bottomLeftRadius="0dp"
android:bottomRightRadius="0dp"
android:topLeftRadius="40dp"
android:topRightRadius="40dp" />
</shape>
</item>
<item android:top="35dp">
<shape android:shape="rectangle">
<size
android:width="80dp"
android:height="5dp" />
<solid android:color="@color/white"></solid>
</shape>
</item>
</layer-list>
其中关键点在于 利用LinearLayout 的-5dp 实现与背景round_circle_white 的item的5dp的高度进行重合,遮挡住BottomNavigationView 上边线,显示round_circle_white的弧形部分边线1px,这样就实现了边线的完美重叠过度。
注意在8.0和4.4上面,要去掉BottomNavigationView水波纹效果和选中背景效果,不然会无法沉浸到凸起的菜单,比较尴尬。