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都有效果
最后看看成品效果吧
点击图片效果