掌握Android底部导航的实现技巧:BottomNavigationView与Fragment的联合 ...

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

本文还有配套的精品资源,点击获取  

  简介:  BottomNavigationView  是Android开辟中用于实现底部导航的核心组件,它答应用户在应用的主要功能模块间切换。本文将详细先容如何利用此组件创建具有动画效果的tab切换,并联合Fragment利用,同时实现点击时的水波纹效果。我们将探讨如何在布局文件中添加  BottomNavigationView  ,如何创建与之对应的Fragment,并通过  FragmentManager  和  FragmentTransaction  实现Fragment的切换逻辑。别的,我们还将了解如何为tab切换添加动画效果和管理点击时的水波纹反馈,从而提升应用的用户体验。

1. BottomNavigationView简介

  在现代移动应用程序设计中,用户界面的导航组件扮演着至关重要的脚色。  BottomNavigationView  作为Material Design规范中的一部分,已成为Android应用底部导航的首选组件。它不仅为用户提供了直观的导航体验,还可以轻松集成多个目标页面,即  Fragments  ,以实现流畅的页面跳转。接下来,我们将探讨如何在XML布局中添加和配置  BottomNavigationView  ,以及如何将其与  Fragments  完美联合,实现高效且美观的用户界面。
2. BottomNavigationView在XML布局中的添加与配置

  在本章节中,我们将深入了解如何在Android应用的XML布局文件中添加和配置BottomNavigationView组件。这是开辟具有底部导航栏的应用程序的关键步骤,它将提供用户界面中的底子导航布局。我们将从底子的属性配置开始,渐渐深入到主题风格选择和自定义布局。
2.1 BottomNavigationView的根本属性配置

设定菜单项的数量和图标

  BottomNavigationView组件答应用户通过底部导航栏切换不同的视图或功能区域。首先,我们需要在XML布局文件中添加BottomNavigationView组件,并设置菜单项的数量以及为每个菜单项指定图标。
  1. <com.google.android.material.bottomnavigation.BottomNavigationView
  2.     android:id="@+id/bottom_navigation"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:layout_alignParentBottom="true"
  6.     android:background="?android:attr/windowBackground"
  7.     app:menu="@menu/bottom_navigation_menu" />
复制代码
在上面的代码块中,  app:menu  属性指向一个菜单资源文件(  bottom_navigation_menu  ),该文件定义了底部导航栏的菜单项数量以及每个菜单项的图标和标题。
  1. <menu xmlns:android="***">
  2.     <item
  3.         android:id="@+id/navigation_home"
  4.         android:icon="@drawable/ic_home"
  5.         android:title="@string/title_home" />
  6.     <item
  7.         android:id="@+id/navigation_dashboard"
  8.         android:icon="@drawable/ic_dashboard"
  9.         android:title="@string/title_dashboard" />
  10.     <item
  11.         android:id="@+id/navigation_notifications"
  12.         android:icon="@drawable/ic_notifications"
  13.         android:title="@string/title_notifications" />
  14. </menu>
复制代码
在  bottom_navigation_menu  资源文件中,我们定义了三个菜单项,每个菜单项都由  item  标签表现,其中  icon  属性指定了菜单项的图标,  title  属性提供了菜单项的文本形貌。
自定义菜单项的布局

  虽然利用默认的菜单项布局通常足以满意需求,但偶然候我们可能需要自定义菜单项的样式和布局,以顺应特定的设计需求。可以通过自定义布局文件来实现这一点。
  首先,在资源文件夹中创建一个自定义的布局文件,例如  custom_bottom_navigation_item.xml  ,然后在其中定义我们想要的布局布局。
  1. <LinearLayout xmlns:android="***"
  2.     android:layout_width="wrap_content"
  3.     android:layout_height="wrap_content"
  4.     android:orientation="vertical"
  5.     android:gravity="center">
  6.     <ImageView
  7.         android:id="@+id/icon"
  8.         android:layout_width="24dp"
  9.         android:layout_height="24dp" />
  10.     <TextView
  11.         android:id="@+id/title"
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content"
  14.         android:textSize="12sp"
  15.         android:textColor="@android:color/white" />
  16. </LinearLayout>
复制代码
然后,在  BottomNavigationView  组件中引用这个自定义布局文件:
  1. app:labelVisibilityMode="unlabeled"
  2. app:ITEM году="@layout/custom_bottom_navigation_item"
复制代码
通过上述步骤,我们可以实现对BottomNavigationView菜单项更深层次的个性化定制。
2.2 BottomNavigationView的主题风格选择

选择符合的主题样式

  主题和样式是影响用户界面视觉效果的重要因素。BottomNavigationView提供了一些内置的主题样式,可以通过  app:itemBackground  等属性来自定义视图的背景,也可以通过  app:itemIconTint  等属性来改变图标颜色。
  1. app:itemIconTint="@drawable/bottom_nav_icon_tint"
  2. app:itemTextColor="@drawable/bottom_nav_text_tint"
复制代码
在上述代码中,  bottom_nav_icon_tint  和  bottom_nav_text_tint  是定义在  drawable  资源文件夹中的选择器文件。它们通常定义了一个颜色状态列表,根据不同状态改变图标和文字的颜色。
自定义主题和颜色方案

  除了利用内置的主题样式外,我们还可以创建自定义的颜色和样式方案,以完全控制BottomNavigationView的表面。这涉及到修改应用的  colors.xml  、  styles.xml  文件和为组件定义的自定义选择器文件。
  1. <color name="bottom_nav_background">@color/white</color>
  2. <color name="bottom_nav_active_color">@color/blue</color>
  3. <color name="bottom_nav_inactive_color">@color/grey</color>
复制代码
在  styles.xml  中,可以定义一个自定义的BottomNavigationView样式:
  1. <style name="CustomBottomNavigationView" parent="Widget.MaterialComponents.BottomNavigationView">
  2.     <item name="itemIconTint">@drawable/bottom_nav_icon_tint_selector</item>
  3.     <item name="itemTextColor">@drawable/bottom_nav_text_tint_selector</item>
  4.     <item name="android:background">@color/bottom_nav_background</item>
  5. </style>
复制代码
这个样式可以进一步在  BottomNavigationView  组件中被引用:
  1. app:theme="@style/CustomBottomNavigationView"
复制代码
通过这种方式,我们可以确保BottomNavigationView与我们应用的主题风格保持同等,同时提供更丰富的视觉效果。
  在接下来的章节中,我们将探讨如何创建和管理Fragment,以及如何将它们与BottomNavigationView联合利用,实现一个功能完善的底部导航布局。
3. Fragment的创建和管理

  在Android开辟中,Fragment是用来表现一个活动的用户界面的一部分的组件。一个活动可以包含多个Fragment,这有助于更好地构造代码,而且让界面的导航更加灵活。本章节将详细先容如何创建和管理Fragment,以及它们在活动中的运行机制。
3.1 Fragment的根本概念和生命周期

3.1.1 理解Fragment的脚色和用途

  Fragment为复杂的界面提供了模块化的构建方式。它们答应你为手机宁静板设计灵活的UI,可以或许在一个屏幕上组合和重用。在平板上,你可能会盼望同时展示多个Fragment,而在手机上,则可能根据不同的操作只展示一个。Fragment还可以包含自己的布局,事件处理逻辑,以及它们自己的生命周期回调方法。
3.1.2 掌握Fragment的生命周期方法

  Fragment的生命由一系列回调方法定义,这些方法会在Fragment生命周期的特定点被调用。这些生命周期方法主要分为三个阶段:创建、运行和销毁。重要的生命周期方法包括:


  •   onCreate()  :Fragment创建时调用,通常用于初始化。
  •   onCreateView()  :创建Fragment的布局视图。
  •   onActivityCreate()  :Fragment与Activity关联时调用,可以用来初始化数据。
  •   onStart()  和  onResume()  :与Activity的相应方法相同,指示Fragment可见。
  •   onPause()  和  onStop()  :与Activity的相应方法相同,指示Fragment不可见。
  •   onDestroyView()  :移除Fragment的布局视图。
  •   onDetach()  :Fragment与Activity分离。
3.2 Fragment事务的根本操作

3.2.1 添加和替换Fragment

  在同一个Activity中,我们可以通过Fragment事务来添加和替换Fragment。示例代码如下:
  1. FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
  2. // 替换Fragment
  3. transaction.replace(R.id.fragment_container, new FragmentA());
  4. // 添加Fragment到回退栈
  5. transaction.addToBackStack(null);
  6. // 提交事务
  7. ***mit();
复制代码
在这里,  R.id.fragment_container  是在XML布局文件中定义的用于容纳Fragment的容器。
3.2.2 回退栈的管理

  回退栈(Back Stack)用于管理Fragment事务的汗青记录。用户在Fragment间切换时,这些事务被压入回退栈。当用户按返回键时,当前的Fragment事务被回退,活动退到上一个Fragment。
  1. transaction.addToBackStack(null);
复制代码
在上面的代码片断中,  addToBackStack  方法将当前事务添加到回退栈。参数  null  表现事务的名称,当为  null  时,体系自动利用事务的形貌性字符串。
3.2.3 管理Fragment的选择状态

  在利用BottomNavigationView与Fragment联适时,管理Fragment的选择状态是非常关键的。通常,我们监听BottomNavigationView的菜单项选择事件,并更新***nt以反映当前选择的状态。
  1. BottomNavigationView navigation = findViewById(R.id.navigation);
  2. navigation.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
  3.     @Override
  4.     public boolean onNavigationItemSelected(@NonNull MenuItem item) {
  5.         Fragment fragment = null;
  6.         switch (item.getItemId()) {
  7.             case R.id.navigation_home:
  8.                 fragment = new HomeFragment();
  9.                 break;
  10.             case R.id.navigation_dashboard:
  11.                 fragment = new DashboardFragment();
  12.                 break;
  13.             case R.id.navigation_notifications:
  14.                 fragment = new NotificationsFragment();
  15.                 break;
  16.         }
  17.         if (fragment != null) {
  18.             getSupportFragmentManager()
  19.                 .beginTransaction()
  20.                 .replace(R.id.fragment_container, fragment)
  21.                 .commit();
  22.         }
  23.         return true;
  24.     }
  25. });
复制代码
这段代码中,我们为BottomNavigationView设置了一个选中项的监听器,当用户选择不同的菜单项时,我们创建对应的Fragment,并替换当前显示的Fragment。
  Fragment和BottomNavigationView的联合利用不仅进步了应用的用户体验,还通过Fragment事务的高级特性,如回退栈管理,增加了应用的可控性和灵活性。下一章节将更深入地探讨BottomNavigationView与Fragment联合利用的具体方法和高级特性实践。
4. BottomNavigationView与Fragment的联合利用方法

4.1 实现BottomNavigationView与Fragment的关联

4.1.1 将Fragment绑定到菜单项

  在 Android 开辟中,  BottomNavigationView  常常与  Fragment  联合利用来创建底部导航栏。每个菜单项都关联一个  Fragment  ,当用户点击一个菜单项时,相应的  Fragment  就会显示在主屏幕上。实现这种关联通常需要利用  FragmentStatePagerAdapter  或者  FragmentManager  ,具体取决于你的  BottomNavigationView  是否联合了  ViewPager  。
  一个简朴有效的实现方式是在  BottomNavigationView  的  OnNavigationItemSelectedListener  中根据选中的菜单项 ID,实行对应的  FragmentManager  事务。下面展示了一个根本的示例代码:
  1. bottomNavigationView.setOnNavigationItemSelectedListener { menuItem ->
  2.     val fragmentTransaction = supportFragmentManager.beginTransaction()
  3.     when (menuItem.itemId) {
  4.         R.id.menu_item_home -> {
  5.             val homeFragment = HomeFragment()
  6.             fragmentTransaction.replace(R.id.fragment_container, homeFragment)
  7.         }
  8.         R.id.menu_item_dashboard -> {
  9.             val dashboardFragment = DashboardFragment()
  10.             fragmentTransaction.replace(R.id.fragment_container, dashboardFragment)
  11.         }
  12.         R.id.menu_item_notifications -> {
  13.             val notificationsFragment = NotificationsFragment()
  14.             fragmentTransaction.replace(R.id.fragment_container, notificationsFragment)
  15.         }
  16.     }
  17.     ***mit()
  18.     true // 确保事件被消耗,否则监听器不会触发
  19. }
复制代码
在这段代码中,我们首先通过  setOnNavigationItemSelectedListener  为  BottomNavigationView  设置了一个监听器。当用户点击任一菜单项时,根据菜单项的 ID 创建一个新的  FragmentTransaction  。然后用  replace  方法将  FragmentManager  中当前活动的  Fragment  替换为与所选菜单项关联的  Fragment  。末了,调用  commit  方法提交事务。
4.1.2 动态添加和管理Fragment

  当应用运行时,可能会有新的  Fragment  需要参加到  BottomNavigationView  中。这就要求我们动态地管理  Fragment  的添加。在这个过程中,我们需要在  FragmentManager  中管理一个  Fragment  的堆栈,以便于处理回退逻辑。
  管理  Fragment  的动态添加通常涉及到:


  • 创建  Fragment  实例
  • 利用  FragmentManager  开启事务
  • 将  Fragment  添加到  FragmentManager  中
  • 在  BottomNavigationView  上更新相应菜单项的选中状态
  动态添加的示例代码如下:
  1. fun addFragment(fragment: Fragment, addToBackStack: Boolean = false) {
  2.     val fragmentTransaction = supportFragmentManager.beginTransaction()
  3.     fragmentTransaction.add(R.id.fragment_container, fragment)
  4.     if (addToBackStack) {
  5.         fragmentTransaction.addToBackStack(null)
  6.     }
  7.     ***mit()
  8. }
复制代码
在这个函数中,  fragment  是将要添加到界面中的  Fragment  ,而  addToBackStack  参数用于指定是否需要将这次事务添加到回退栈中。如果需要从  Fragment  的堆栈中移除当前  Fragment  ,可以利用  remove  方法。
  通过这种方式,你可以灵活地管理多个  Fragment  的状态和生命周期。这也意味着,当用户按下返回按钮时,可以从  FragmentManager  的回退栈中恢复之前查看的  Fragment  ,从而提供流畅的用户体验。
4.2 管理Fragment的选择状态

4.2.1 监听菜单项的选择事件

  为了响应  BottomNavigationView  中菜单项的点击事件,我们需要为它设置一个  OnNavigationItemSelectedListener  。这个监听器会在用户点击菜单项时被触发,使得我们可以根据选中的菜单项来更新界面。
  以下是如何设置这个监听器的代码示例:
  1. bottomNavigationView.setOnNavigationItemSelectedListener { menuItem ->
  2.     // 逻辑代码在上文4.1.1节中提供
  3.     true // 表示事件已处理
  4. }
复制代码
在上面的代码中,每当一个菜单项被点击时,  setOnNavigationItemSelectedListener  方法就会接收到一个  MenuItem  对象。通过调用  itemId  属性,我们可以获得该菜单项的 ID,并根据 ID 判断出被选中的菜单项,然后实行相应的逻辑处理。
4.2.2 更新***nt状态以反映选择

  当用户点击一个菜单项时,通常期望界面相应地更新,反映用户的选择。这通常意味着要更新当前显示的  Fragment  。实现这一目标的一个有效方法是利用  FragmentStatePagerAdapter  联合  ViewPager  。
  当用户在  BottomNavigationView  中选择一个菜单项时,  ViewPager  的当前页面也会相应地举行更新。每个页面对应一个  Fragment  ,从而实现了与  BottomNavigationView  菜单项的同步切换。
  以下是将  ViewPager  与  BottomNavigationView  联合利用的示例代码:
  1. //ViewPager设置适配器
  2. viewPager.adapter = ViewPagerAdapter(supportFragmentManager)
  3. //设置ViewPager切换监听器
  4. viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
  5.     override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
  6.     override fun onPageSelected(position: Int) {
  7.         bottomNavigationView.menu.getItem(position).isChecked = true
  8.     }
  9.     override fun onPageScrollStateChanged(state: Int) {}
  10. })
  11. //BottomNavigationView设置选择监听器
  12. bottomNavigationView.setOnNavigationItemSelectedListener { menuItem ->
  13.     val itemPosition = bottomNavigationView.menu.getItemIndex(menuItem)
  14.     viewPager.setCurrentItem(itemPosition, true)
  15.     true
  16. }
复制代码
在这个代码段中,我们首先创建了一个  ViewPager  的适配器,并将它设置给了  ViewPager  。然后,为  ViewPager  添加了一个页面切换监听器。当  ViewPager  中的页面切换时,  onPageSelected  方法会被触发。我们通过  setCurrentItem  方法来设置当前选中的页面索引,并确保  BottomNavigationView  的相应菜单项也被选中。
  通过这种方式,我们确保了  ViewPager  中的  Fragment  的切换状态与  BottomNavigationView  的菜单项选择状态同步更新,从而提供了同等的用户界面体验。
5. BottomNavigationView的高级特性实践

5.1 实现tab切换动画效果

5.1.1 自定义切换动画的方法

  在开辟Android应用时,自定义视图动画是一个重要的环节,这不仅可以提升用户的交互体验,还可以在视觉上区分不同页面或视图的切换。对于  BottomNavigationView  ,我们可以为tab切换实现自定义动画,以增强用户的视觉感受和操作反馈。
  要实现自定义的切换动画,我们需要创建两个动画资源文件,一个用于形貌Fragment进入的动画,另一个用于形貌Fragment退出的动画。这些动画可以是移动、缩放、淡入淡出等效果的组合。
  在  res/anim/  目录下创建两个XML文件:


  •   fragment_enter_animation.xml
  •   fragment_exit_animation.xml
  然后定义相应的动画效果,例如:
  1. <!-- res/anim/fragment_enter_animation.xml -->
  2. <set xmlns:android="***">
  3.     <translate
  4.         android:fromXDelta="100%"
  5.         android:toXDelta="0"
  6.         android:duration="300"/>
  7.     <alpha
  8.         android:fromAlpha="0.0"
  9.         android:toAlpha="1.0"
  10.         android:duration="300"/>
  11. </set>
  12. <!-- res/anim/fragment_exit_animation.xml -->
  13. <set xmlns:android="***">
  14.     <translate
  15.         android:fromXDelta="0"
  16.         android:toXDelta="-100%"
  17.         android:duration="300"/>
  18.     <alpha
  19.         android:fromAlpha="1.0"
  20.         android:toAlpha="0.0"
  21.         android:duration="300"/>
  22. </set>
复制代码
在代码中,我们可以在Fragment切换时应用这些动画:
  1. FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
  2. transaction.setCustomAnimations(
  3.     R.anim.fragment_enter_animation,
  4.     R.anim.fragment_exit_animation
  5. );
  6. transaction.replace(R.id.fragment_container, new HomeFragment()).commit();
复制代码
5.1.2 应用预定义动画资源

  除了自定义动画,Android体系还提供了预定义的动画资源,可以通过简朴的调用实现tab切换动画效果。这些资源通常位于  android.R.anim  包中。
  例如,如果我们想为  BottomNavigationView  中的tab切换应用一个简朴的淡入淡出效果,可以在Fragment事务中添加如下代码:
  1. FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
  2. transaction.setCustomAnimations(
  3.     android.R.anim.fade_in,
  4.     android.R.anim.fade_out
  5. );
  6. transaction.replace(R.id.fragment_container, new HomeFragment()).commit();
复制代码
5.2 实现tab点击水波纹效果

5.2.1 利用selector实现点击反馈

  水波纹效果(Ripple Effect)是一种常用的设计元素,用于在用户交互时提供视觉上的反馈。Android体系从Lollipop版本开始,提供了对水波纹效果的支持。我们可以在  BottomNavigationView  的菜单项中实现点击水波纹效果。
  在  res/drawable/  目录下创建一个名为  tab_ripple.xml  的selector文件:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ripple xmlns:android="***"
  3.     android:color="?android:colorControlHighlight">
  4.     <item android:id="@android:id/mask">
  5.         <shape android:shape="rectangle">
  6.             <solid android:color="?android:colorAccent"/>
  7.         </shape>
  8.     </item>
  9. </ripple>
复制代码
然后在  BottomNavigationView  的XML布局文件中,为每个菜单项设置这个selector作为背景:
  1. <android.support.design.widget.BottomNavigationView
  2.     android:id="@+id/navigation"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="wrap_content"
  5.     android:background="?android:attr/windowBackground"
  6.     app:menu="@menu/navigation"
  7.     app:labelVisibilityMode="unlabeled"
  8.     android:backgroundTint="@color/white"
  9.     android:foreground="?attr/selectableItemBackgroundBorderless"
  10.     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
  11. </android.support.design.widget.BottomNavigationView>
复制代码
5.2.2 利用代码添加水波纹动画

  除了利用selector来实现静态的水波纹效果,我们还可以利用代码动态地为点击事件添加水波纹动画。
  1. View tab = findViewById(R.id.navigation);
  2. tab.setOnTouchListener((v, event) -> {
  3.     if (event.getAction() == MotionEvent.ACTION_DOWN) {
  4.         // 创建水波纹动画
  5.         int[] location = new int[2];
  6.         v.getLocationOnScreen(location);
  7.         int x = location[0] + event.getX();
  8.         int y = location[1] + event.getY();
  9.         RippleDrawable ripple = (RippleDrawable) ContextCompat.getDrawable(this, R.drawable.ripple_shape);
  10.         ripple.setHotspot(x, y);
  11.         ripple.startImplicitAnimation();
  12.         return true;
  13.     }
  14.     return false;
  15. });
复制代码
5.3 自定义BottomNavigationView和Fragment切换

5.3.1 创建自定义的BottomNavigationView

  偶然候,我们可能需要对  BottomNavigationView  举行自定义,以满意特定的设计要求。例如,添加一个浮动按钮、更改菜单项的图标或者改变布局布局等。自定义  BottomNavigationView  需要继续  BottomNavigationView  类,并重写相应的逻辑。
  1. public class CustomBottomNavigationView extends BottomNavigationView {
  2.     // ...添加自定义代码
  3.     public CustomBottomNavigationView(Context context) {
  4.         super(context);
  5.         // 初始化自定义设置
  6.     }
  7.     public CustomBottomNavigationView(Context context, AttributeSet attrs) {
  8.         super(context, attrs);
  9.         // 初始化自定义设置
  10.     }
  11.     public CustomBottomNavigationView(Context context, AttributeSet attrs, int defStyleAttr) {
  12.         super(context, attrs, defStyleAttr);
  13.         // 初始化自定义设置
  14.     }
  15. }
复制代码
5.3.2 实现高级切换逻辑和动画效果

  自定义切换逻辑可以涉及复杂的动画效果和切换流程。为了实现更丰富的切换效果,我们可以利用第三方库如  ViewPager  、  FragmentPagerAdapter  、  FragmentStatePagerAdapter  等来创建更复杂的tab切换动画。
  例如,利用  ViewPager  联合  FragmentPagerAdapter  ,我们不仅可以创建左右滑动切换Fragment的效果,还可以添加动画效果来增强用户体验:
  1. ViewPager viewPager = findViewById(R.id.view_pager);
  2. viewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
  3. viewPager.setPageTransformer(false, new DepthPageTransformer());
复制代码
  DepthPageTransformer  是一个简朴的自定义PageTransformer类,用于为每个页面提供深度效果:
  1. public class DepthPageTransformer implements ViewPager.PageTransformer {
  2.     private static final float MIN_SCALE = 0.75f;
  3.     public void transformPage(View view, float position) {
  4.         if (position < -1) {
  5.             // This page is way off-screen to the left.
  6.             view.setAlpha(0);
  7.         } else if (position <= 0 || position <= 1) {
  8.             // Modify the default slide transition to shrink the page as well
  9.             float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position));
  10.             view.setAlpha(1 - (position * 0.3f));
  11.             view.setPivotX(view.getWidth() * 0.5f);
  12.             view.setPivotY(view.getHeight());
  13.             view.setScaleX(scaleFactor);
  14.             view.setScaleY(scaleFactor);
  15.         } else {
  16.             // This page is way off-screen to the right.
  17.             view.setAlpha(0);
  18.         }
  19.     }
  20. }
复制代码
通过上述内容,我们已经了解了如何在  BottomNavigationView  中实现更高级的动画效果和自定义视图。通过实践这些高级特性,我们可以更好地掌控应用的交互体验和视觉表现。
   本文还有配套的精品资源,点击获取  

  简介:  BottomNavigationView  是Android开辟中用于实现底部导航的核心组件,它答应用户在应用的主要功能模块间切换。本文将详细先容如何利用此组件创建具有动画效果的tab切换,并联合Fragment利用,同时实现点击时的水波纹效果。我们将探讨如何在布局文件中添加  BottomNavigationView  ,如何创建与之对应的Fragment,并通过  FragmentManager  和  FragmentTransaction  实现Fragment的切换逻辑。别的,我们还将了解如何为tab切换添加动画效果和管理点击时的水波纹反馈,从而提升应用的用户体验。
   本文还有配套的精品资源,点击获取  


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

勿忘初心做自己

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表