底部导航BottomNavigation(学习笔记)

1.创建一个空项目
2.创建三个Fragment(with ViewModel)
在这里插入图片描述
创建好后像这样
在这里插入图片描述
3.创建底部菜单
对着res文件夹右键选择创建
在这里插入图片描述
给menu添加item 然后修改title 和 icon
在这里插入图片描述
关于图标选择新建Vector asset
在这里插入图片描述

4.创建Navigation导航

5.添加页面
在这里插入图片描述

注意每个页面的id要和item的id相对应 要不然没效果

6.在mainlayout中添加bottomnavigationview和fragmentHost
在bottomnavigationview添加menu
然后像这样
在这里插入图片描述

然后修改
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    BottomNavigationView bottomNavigationView =findViewById(R.id.bottomNavigationView); //绑定对象
    NavController navController = Navigation.findNavController(this,R.id.fragment);//创建导航控制 并且获取作用对象
    //Builder中可以填三个fragment 或者bottomNavigationView.getMenu() 后者会更方便点   也可以写navController.getGraph()
    //navController.getGraph()导航图标会生成一个返回箭头 所以根据情况使用
    AppBarConfiguration configuration = new AppBarConfiguration.Builder(bottomNavigationView.getMenu()).build();
    NavigationUI.setupActionBarWithNavController(this,navController,configuration);//添加到ui上
    NavigationUI.setupWithNavController(bottomNavigationView,navController);
}
}

这时候我们的底部导航就有功能了 点击不同的按钮就会切换到不同的Fragment

然后就是动画了

在第一个Fragment中添加一个ImageView
在这里插入图片描述

layout_gravity 可以在线性布局中修改控件的位置 我选的是center

然后java文件中写代码

public class FirstFragment extends Fragment {

private FirstViewModel mViewModel;
private ImageView imageView;
public static FirstFragment newInstance() {
    return new FirstFragment();
}

@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.first_fragment, container, false);
    imageView  = view.findViewById(R.id.imageView);

    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    mViewModel = ViewModelProviders.of(this).get(FirstViewModel.class);
    imageView.setRotation(mViewModel.rotationPosition);
    //动画 通过属性来修改
    final ObjectAnimator animator = ObjectAnimator.ofFloat(imageView,"rotation",0,0);
    animator.setDuration(500);
    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!animator.isRunning()){
                animator.setFloatValues(imageView.getRotation(),imageView.getRotation()+90);
                animator.start();
                mViewModel.rotationPosition += 0;
            }
        }
    });
}

}

缩放和位置改变类似与这个
关于ViewModel

mViewModel = ViewModelProviders.of(this).get(FirstViewModel.class);

this是作用与本页面 像屏幕反转 和 Home 都会保存数据 但是切换了Fragment数据就会消失
可以改为

mViewModel = ViewModelProviders.of(requireActivity()).get(FirstViewModel.class);

就是整个Activity都有效果

最后看看成品效果吧

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

点击图片效果

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值