ViewPager2滑动页面滑动到最后再次滑动跳转到新页面 When swipe to left at the last page, jump to new page

代码如下:

package com.example.hrminiapp;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager2.widget.ViewPager2;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    ViewPager2 viewPager2;
    int[] layouts;
    ViewsSliderAdapter mAdapter;
    boolean isLastPageSwiped = false;
    int counterPageScroll = 0;

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

    public void init() {
    	//3 screen slides created
        layouts = new int[]{
                R.layout.slide_screen_1,
                R.layout.slide_screen_2,
                R.layout.slide_screen_3,
        };
        viewPager2 = (ViewPager2) findViewById(R.id.view_paper);
        mAdapter = new ViewsSliderAdapter(layouts);
        viewPager2.setAdapter(mAdapter);
        viewPager2.registerOnPageChangeCallback(pageChangeCallback);

    }

    ViewPager2.OnPageChangeCallback pageChangeCallback = new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            //swipe to left at the last page->jump to login page
            //when click back button on emulator, 1 swipe to left to jump again, without this line, 2 more swipes
            isLastPageSwiped = false ? true : false;
            if (position == layouts.length - 1 && !isLastPageSwiped) {
                if (counterPageScroll != 0) {
                    isLastPageSwiped = true;
                    //跳转到指定界面
                    launchLoginScreen();
                }
                counterPageScroll++;
            } else {
                isLastPageSwiped = false;
                counterPageScroll = 0;
            }
        }

    };

    //jump to login page
    private void launchLoginScreen() {
        //跳转到指定界面,代码实现
    }
}

感谢教授的帮助,通过逻辑锁解决了。在onPageScroll方法中,position代表当前第几页,从0开始整数递增。代码中一共有3个页面,所以layout.length长度为3,当position为2时表示最后一页,此时再从右向左划则跳转到launchLoginScreen指定页面。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,可以通过在 ViewPager2 的 Adapter 中重写 `onViewAttachedToWindow()` 方法来控制页面滑动。具体步骤如下: 1. 在 Adapter 中定义一个变量 `fixedPosition`,表示固定位置的页面的索引。 2. 在 `onViewAttachedToWindow()` 方法中,判断当前绑定的页面是否是固定位置的页面,如果是,则将其禁止滑动;否则,保持正常的滑动行为。 示例代码如下: ```java public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { private List<Fragment> fragments; private int fixedPosition; public MyAdapter(List<Fragment> fragments, int fixedPosition) { this.fragments = fragments; this.fixedPosition = fixedPosition; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_page, parent, false); return new MyViewHolder(view); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.bind(fragments.get(position)); } @Override public int getItemCount() { return fragments.size(); } @Override public void onViewAttachedToWindow(@NonNull MyViewHolder holder) { super.onViewAttachedToWindow(holder); int position = holder.getAdapterPosition(); if (position == fixedPosition) { holder.itemView.setTranslationX(0); holder.itemView.setClickable(false); } else { holder.itemView.setTranslationX(-holder.itemView.getWidth() / 3f); holder.itemView.setClickable(true); } } static class MyViewHolder extends RecyclerView.ViewHolder { private TextView textView; public MyViewHolder(@NonNull View itemView) { super(itemView); textView = itemView.findViewById(R.id.text); } public void bind(Fragment fragment) { textView.setText(fragment.toString()); } } } ``` 在这个示例中,我们假设 `fixedPosition` 为 0,表示第一个页面是固定位置的页面。在 `onViewAttachedToWindow()` 方法中,如果当前绑定的页面是第一个页面,则将其禁止滑动,否则将其向左平移 1/3 的宽度,并启用点击事件。 注意:这种方式只是实现了页面滑动的效果,但是用户仍然可以通过点击页面来切换页面。如果需要完全禁止用户切换页面,可以在禁止页面滑动的同时,禁用 ViewPager2滑动事件。 希望这个回答能够帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值