安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画

本文为学习笔记,所用的图片、案例均为教学视频截图

源视频地址:Navigation组件,让页面切换无比简单2)
作者:longway777

目录

  • 实现效果
  • 一、创建两个fragment
  • 二、创建导航资源nav
  • 三、在activity_main中添加navhost
  • 四、在fragment.java中设置按键事件
  • 五、实现数据的传递
  • 六、添加自己制作的动画
  • 完整代码

实现效果

在第一个页面中输入文本数据,点击button进行跳转,并且把数据带到下一个界面。在页面切换过程中,运用到了制作的动画(进来的页面从左向右,出去的页面被往右边挤出去)

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第1张图片

一、创建两个fragment

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第2张图片
更改为约束布局
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第3张图片

二、创建导航资源nav

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第4张图片

三、在activity_main中添加navhost

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第5张图片

四、在fragment.java中设置按键事件

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第6张图片

五、实现数据的传递

使用bundle(然而这并不好用,下一节会介绍使用viewModel的方式)
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第7张图片HomeFragment.java中,传递bundle到下一个界面
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第8张图片

DetailFragment.java中,拿到bundle的数据并显示

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第9张图片

六、添加自己制作的动画

tween animation 渐变动画演示

自定义一个简单的动画:从左边滑动到中间

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第10张图片(1)页面进入动画:

从左边移动进来
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第11张图片

(2)页面退出动画:

从右边移动出去
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第12张图片
(3)应用到导航中:

安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第13张图片
其他:做一个缩放的动画

比例从0到1,即为慢慢变大
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第14张图片
退出,慢慢缩小
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第15张图片

完整代码

HomeFragment.java

public class HomeFragment extends Fragment {
     

    public HomeFragment() {
     
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
     
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
     
        super.onActivityCreated(savedInstanceState);
        getView().findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
     
            @Override
            public void onClick(View v) {
     

                EditText editText = getView().findViewById(R.id.editText);
                //获取输入的值
                String string = editText.getText().toString();
                //如果值为空,不进行页面跳转并提示
                if(TextUtils.isEmpty(string)){
     
                    Toast.makeText(getActivity(),"请先输入名字!",Toast.LENGTH_SHORT).show();
                    return;
                }
                //利用Bundle传递数据string
                Bundle bundle = new Bundle();
                //               key       content
                bundle.putString("my_name",string);

                //页面跳转
                NavController controller = Navigation.findNavController(v);
                //                                                记得把数据作为参数传入
                controller.navigate(R.id.action_homeFragment_to_detailFragment,bundle);
            }
        });
    }
}

fragment_home.xml
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第16张图片
DetailFragment.java

public class DetailFragment extends Fragment {
     

    public DetailFragment() {
     
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
     
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_detail, container, false);
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
     
        super.onActivityCreated(savedInstanceState);
        //获取homefragment输入的内容并显示出来
        String string = getArguments().getString("my_name");
        TextView textView = getView().findViewById(R.id.textView);
        textView.setText(string);
    }
}

fragment_detail.xml
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第17张图片my_nav.xml
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第18张图片

MainActivity.java未添加内容

activity_main.xml
安卓APP_ jetPack —— Navigation页面导航(2)数据传递与动画_第19张图片
旋转进入





<set xmlns:android="http://schemas.android.com/apk/res/android">
    
    scale>
set>

旋转退出



<set xmlns:android="http://schemas.android.com/apk/res/android">
    
    scale>
set>

页面从左边进入


<set xmlns:android="http://schemas.android.com/apk/res/android">


translate>
set>

页面从右边退出


<set xmlns:android="http://schemas.android.com/apk/res/android">


translate>
set>

你可能感兴趣的:(JetPack框架,安卓,移动开发,android)