实现滑动切换碎片

						实现滑动切换碎片

1.在App里面滑动切换页面也算是挺常见的,比如像微信一样通过滑动来从微信页面切换到通讯录或发现,我这些页面
2.那么首先将需要切换的界面弄好,就先建立4个页面 , 每一个页面的布局管理器都添加上一个id
在这里插入图片描述
3.现在新建这4个页面的java类 ,让这4个类都继承Fragment ,重写onCreateView并将这个类中需要的页面放入到inflater中 , 其余3个也一样
在这里插入图片描述

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

    return view;
}

4.那么就在MainActivity中将这4个Fragment加载出来,MainActivity的界面如下 ,这个是用RadioGroup包裹着4个RadioButton来组成的,每一个RadioButton都放入一个id
在这里插入图片描述
5.开始在MainActivity中获取到所有需要的id
在这里插入图片描述
在这里插入图片描述
6.定义一个Fragment数组 ,因为是4个要页面所以就new 4个null

	//定义一个Fragment数组
	Fragment[] fragments = new Fragment[]{null , null , null ,null};

7.想要显示碎片那么就先获取到Fragment管理器,通过管理器开启 Fragment事务,将Fragment对象添加到Fragment事务中,最后显示Fragment开启事务 ,这里呢申明private int index来获取到前是哪个页面

 private void switchFragment(int fragmentIndex){
	//获取到Fragment管理器
	FragmentManager fragmentManager=MainActivity.this.getSupportFragmentManager();
	//通过管理器开启Fragment事务
	FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction();
	//懒加载  如果需要显示的Fragment为null 就new,并添加到Fragment事务中
 	if(fragments[fragmentIndex] == null){
     		switch (fragmentIndex){
         		      case 0 :
             	         fragments[fragmentIndex] = new learnActivity();
                                  index = 0;
                                  break;
        		      case 1 :
             	         fragments[fragmentIndex] = new recordActivity();
                                 index = 1;
                                 break;
                              case 2 :
             	         fragments[fragmentIndex] = new vocabularyActivity();
             	         index = 2;
            		         break;
         		      case 3 :
             	         fragments[fragmentIndex] = new userActivity();
             	         index = 3;
             	        break;
        	     	     default:
     		}
     	//添加Fragment对象到Fragment事务中
     	fragmentTransaction.add(R.id.ll_main_content , fragments[fragmentIndex]);
     	 }

 //隐藏其他的fragment
 for (int i = 0 ; i<fragments.length ; i++){
     if(fragmentIndex != i && fragments[i] != null){
         //隐藏
         fragmentTransaction.hide(fragments[i]);
     }
 }
 //显示fragment
 fragmentTransaction.show(fragments[fragmentIndex]);
 //开启事务
 fragmentTransaction.commit();
}

8.现在开始实现滑动切换碎片,代码如下,这里呢默认为第一个碎片,通过监听MianActivity界面的屏幕触摸,来获取到用户手指按下的坐标和手指抬起的坐标,在手指抬起的时候,开始判断是从左边往右边滑动还是从右边往左边滑动,在每一次滑动的时候进行判断index为哪个数值在将index放入到switchFragment()方法中,这样就能实现滑动切换页面

private  float touchDownX; //手指按下的X坐标
private  float touchUpX; //手指抬起的X坐标

switchFragment(0);
rbLearn.setChecked(true);

//触摸监听器
llContent.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //Toast.makeText(mMainActivity, "123", Toast.LENGTH_SHORT).show();
        //判断动作是否等于按下
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            touchDownX = event.getX();
            return true;
        }else if(event.getAction() == MotionEvent.ACTION_UP){
            touchUpX = event.getX();
            //判断滑动的方向是从左往右
            Log.d("index" , ""+index+"");
            if(touchUpX - touchDownX > 100){
                //判断index是否为0
                if(index == 0){

                }else{
                    index = index - 1;
                    if(index == 2){
                        rbVocabulary.setChecked(true);
                    }else if(index == 1){
                        rbRecord.setChecked(true);
                    }else if(index == 0){
                        rbLearn.setChecked(true);
                    }
                    switchFragment(index);
                }
            }//判断滑动的方向是从右往左
            else if(touchDownX - touchUpX > 100){
                //判断index是否为3
                if(index == 3){

                }else{
                    index = index+1;
                    if(index == 1){
                        //记录按钮获取焦点
                        rbRecord.setChecked(true);
                     }else if(index == 2){
                        rbVocabulary.setChecked(true);
                    }else if(index == 3){
                        rbUser.setChecked(true);
                    }
                    switchFragment(index);
                }
            }
            return true;
        }
        return false;
    }
});

9.效果图,在学习界面从右往左滑动切换到记录页面将并获取焦点
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值