Android通过menu来实现底部按钮导航(跳转Activity)

本文详细介绍了如何在Android应用中使用VectorAsset添加图标,设置移动动画(如slide_in_right和slide_out_left),定义动画样式,以及配置底部导航栏的背景、菜单、布局和逻辑代码,包括点击事件的平滑切换动画效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

演示动画
在这里插入图片描述

一、准备工作

首先可以通过Vector Asset来增加几个图标以备使用。

在这里插入图片描述
这里增加的图标为以下四种,可以通过关键字快速查找
在这里插入图片描述

二、设置移动动画

在这里去设置点击底部导航栏按钮实现跳转的动画

方法:

  1. 新建anim文件夹用于存放动画的xml文件
  2. 新建动画文件slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration = "400"	
        android:fromXDelta="100%p"
        android:toXDelta="0"/>
</set>
<!-- 动画持续时间400毫秒
     <translate>:定义了平移(Translate)动画效果。
   	android:fromXDelta="100%p":起始点在X轴上的偏移量,这里表示从屏幕右侧开始(100%表示屏幕宽度)。
	android:toXDelta="0":结束点在X轴上的偏移量,这里表示在屏幕左侧结束(0表示屏幕宽度)。
	简单来说,这段代码描述了一个从屏幕右侧滑入的动画效果,持续时间为0.4秒。
	你可以将该动画应用于Android应用程序的视图,使其在用户界面中产生平移效果。-->
  1. 新建动画文件slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration = "400"
        android:fromXDelta="0"
        android:toXDelta="-100%p"/>
</set>
  1. 定义新的动画样式

在themes中加入以下代码

<style name="SlideActivityAnimation" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
        <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
    </style>
<!-- 
这段XML代码定义了一个名为"SlideActivityAnimation"的样式(Style)。该样式是基于Android中的"Animation.Activity"样式进行继承。
在Android开发中,样式(Style)用于定义一组视觉和行为属性,以应用于特定的视图或组件。样式可以包含多个属性项(item),每个属性项定义了视图或组件的特定属性。对于这段代码,"SlideActivityAnimation"样式定义了两个属性项:
android:activityOpenEnterAnimation:指定了打开一个新的Activity时的进入动画。它引用了一个名为"slide_in_right"的动画资源(@anim/slide_in_right)。
android:activityOpenExitAnimation:指定了打开一个新的Activity时的退出动画。它引用了一个名为"slide_out_left"的动画资源(@anim/slide_out_left)。
简而言之,这段代码定义了一个样式,用于设置打开新Activity时的进入和退出动画效果。你可以将这个样式应用于你的Activity或其它视图组件上,以实现滑动效果的过渡动画。 -->

三、设置背景

新建bottom_background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid
        android:color="@color/lavender"/>
    <corners
        android:radius="40dp"/>
</shape>

新建选择器item_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_activated="true"
        android:color="@color/white"/>
    <item
        android:state_activated="false"
        android:color="@color/grey"/>
</selector>

四、设置menu

​ 1.新建menu文件夹

​ 2.新建bottom_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/bottom_home"
        android:icon="@drawable/baseline_home_24"
        android:title="Home"/>
    <item
        android:id="@+id/bottom_search"
        android:icon="@drawable/baseline_search_24"
        android:title="Search"/>
    <item
        android:id="@+id/bottom_settings"
        android:icon="@drawable/baseline_settings_24"
        android:title="Settings"/>
    <item
        android:id="@+id/bottom_profile"
        android:icon="@drawable/baseline_person_pin_24"
        android:title="Profile"/>
</menu>

五、设置布局文件

​ 下方代码为mainactivity(Home)示例,还需要新建Profileactivity、SearchActivity、Settingsactivity。自行设置

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Home"
    android:textSize="36sp"
    android:textColor="@color/lavender"
    android:layout_centerInParent="true"
    />
<com.google.android.material.bottomnavigation.BottomNavigationView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/bottomNavigationView"
    android:layout_alignParentBottom="true"
    android:background="@drawable/bottom_background"
    android:layout_marginEnd="20dp"
    android:layout_marginStart="20dp"
    android:layout_marginBottom="20dp"
    android:layout_marginTop="30dp"
    android:elevation="2dp"
    app:menu="@menu/bottom_menu"
    app:itemIconSize="30dp"
    app:itemIconTint="@drawable/item_selector"
    app:itemRippleColor="@android:color/transparent"
    app:labelVisibilityMode="unlabeled"/>
<!--app:menu="@menu/bottom_menu":指定了底部导航栏的菜单文件。@menu/bottom_menu 是一个菜单资源文件,其中定义了底部导航栏的项。
	app:itemIconSize="30dp":设置底部导航栏项的图标大小为 30dp。
	app:itemIconTint="@drawable/item_selector":指定了底部导航栏项图标的颜色。
	@drawable/item_selector 是一个选择器(Selector)资源文件,用于根据不同的状态选择不同的图标颜色。
	app:itemRippleColor="@android:color/transparent":设置底部导航栏项的点击涟漪效果颜色为透明。当点击底部导航栏项时,将没有涟漪效果。
	app:labelVisibilityMode="unlabeled":设置底部导航栏项的标签可见性模式为 "unlabeled"。这意味着底部导航栏项的标签将不可见,只显示图标。
	这些属性可以在布局文件中的底部导航栏视图中使用,以定制底部导航栏的外观和行为。你可以根据需要修改这些属性的值来满足你的界面设计需求。-->

六、设置逻辑代码

mainactivity中的点击跳转事件,Profileactivity、SearchActivity、Settingsactivity。自行设置。(不知道为啥现在用switch会报错,所以就用了if)

BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);
        bottomNavigationView.setSelectedItemId(R.id.bottom_home);
        bottomNavigationView.setOnItemSelectedListener(item -> {
            if(item.getItemId()==R.id.bottom_home){
                return true;
            } else if (item.getItemId()==R.id.bottom_search) {
                startActivity(new Intent(getApplicationContext(),SearchActivity.class));
                overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
                finish();
            } else if (item.getItemId()==R.id.bottom_settings) {
                startActivity(new Intent(getApplicationContext(), SettingActivity.class));
                overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
                finish();
            } else if (item.getItemId() ==R.id.bottom_profile) {
                startActivity(new Intent(getApplicationContext(),ProfileActivity.class));
                overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);
                finish();
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值