【问题标题】:selected dots not swiping to next page in android?选定的点不会在android中滑动到下一页?
【发布时间】:2020-07-15 16:26:27
【问题描述】:

我正在开发新的应用程序,我通过使用以下 https://github.com/romandanylyk/PageIndicatorView 库实现了点指示器,但我无法滑动到下一页

在我当前的 kotlin 实现代码下面

class IntroductionPages: AppCompatActivity() {

  var pager: ViewPager? =null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.introduction_page)
        val pageIndicatorView: PageIndicatorView = findViewById(R.id.pageIndicatorView)
        pageIndicatorView.count = 3 // specify total count of indicators
        pageIndicatorView.selection = 0



       pager?.addOnPageChangeListener(object : OnPageChangeListener {
            override fun onPageScrolled(
                position: Int,
                positionOffset: Float,
                positionOffsetPixels: Int

            ) { /*empty*/

            }

            override fun onPageSelected(position: Int) {
                pageIndicatorView.selection = position
               when(position){
                   0-> AnimationType.SLIDE
               }


            }

            override fun onPageScrollStateChanged(state: Int) { /*empty*/
            }
        })

       val textView= findViewById<TextView>(R.id.skip)

        textView.setOnClickListener {
            val intent = Intent(this, BookAppointment::class.java)
            startActivity(intent)
        }


    }

布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:attrs="http://schemas.android.com/apk/res-auto"
    >


    <ImageView
        android:id="@+id/vector_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:adjustViewBounds="true"
        android:background="@drawable/vectors_1"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_editor_absoluteX="0dp" />


    <ImageView
        android:id="@+id/some_id"
        android:layout_width="221dp"
        android:layout_height="158dp"
        android:background="@drawable/doctor_appointment"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.426"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.158" />

    <TextView
        android:id="@+id/search_doct"
        android:layout_width="272dp"
        android:layout_height="82dp"
        android:gravity="center_horizontal|top"
        android:text="@string/search_doct"
        android:textAppearance="@style/search_doct"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/some_id" />

    <TextView
        android:id="@+id/get_list_of"
        android:layout_width="217dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal|top"
        android:text="@string/get_list_of"
        android:textAppearance="@style/get_list_of"
        app:layout_constraintBottom_toBottomOf="@id/search_doct"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/search_doct" />

    <com.rd.PageIndicatorView
        android:id="@+id/pageIndicatorView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.477"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.801"
        app:piv_animationType="scale"
        app:piv_dynamicCount="true"
        app:piv_interactiveAnimation="true"
        app:piv_selectedColor="@color/gray_50"
        app:piv_unselectedColor="@color/gray_300"
        app:piv_viewPager="@id/viewPager"
        attrs:piv_padding="12dp"
        attrs:piv_radius="8dp" />




    <TextView
        android:layout_below="@id/pageIndicatorView"
        android:id="@+id/skip"
        android:layout_width="87dp"
        android:layout_height="43dp"
        android:gravity="center_horizontal|top"
        android:text="Skip"
        android:textAppearance="@style/skip"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintVertical_bias="0.93"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

我的问题是我必须做些什么才能正确实现正确的滑动功能,以便我可以滑动到下一页

我想实现这种方法

【问题讨论】:

    标签: android android-layout kotlin viewpagerindicator


    【解决方案1】:

    我不完全理解您的问题,但我可以看到您想要一个应该滑动的 IntroSlider,并且点应该随着滑动移动。 所以我有一个 IntroSlider,你可以使用它,如果你希望你可以在 android studio 中将我的带有内置 java 的 java 代码转换为 kotlin 转换器。但我想你的项目中的 java 和 kotlin 都不会出现问题。所以这里是解决方案。

    public class MainIntroSlider extends AppCompatActivity {
    private ViewPager viewPager;
    private MyViewPagerAdapter myViewPagerAdapter;
    private LinearLayout dotsLayout;
    private TextView[] dots;
    private int[] layouts;
    private Button btnSkip, btnNext;
    private PrefManager prefManager;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_intro_slider);
        prefManager = new PrefManager(this);
        if (!prefManager.isFirstTimeLaunch()) {
            launchHomeScreen();
            finish();
        }
        // Making notification bar transparent
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    
        setContentView(R.layout.activity_main_intro_slider);
    
        viewPager = (ViewPager) findViewById(R.id.view_pager);
        dotsLayout = (LinearLayout) findViewById(R.id.layoutDots);
        btnSkip = (Button) findViewById(R.id.btn_skip);
        btnNext = (Button) findViewById(R.id.btn_next);
    
    
        // layouts of welcome sliders
        layouts = new int[]{
                R.layout.welcome_slide1,
                R.layout.welcome_slide2,
                R.layout.welcome_slide3,
                R.layout.welcome_slide4
        };
    
        // adding bottom dots
        addBottomDots(0);
    
        // making notification bar transparent
        changeStatusBarColor();
    
        myViewPagerAdapter = new MyViewPagerAdapter();
        viewPager.setAdapter(myViewPagerAdapter);
        viewPager.addOnPageChangeListener(viewPagerPageChangeListener);
    
        btnSkip.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                launchHomeScreen();
            }
        });
    
        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // checking for last page if true launch MainActivity
                int current = getItem(+1);
                if (current < layouts.length) {
                    // move to next screen
                    viewPager.setCurrentItem(current);
                } else {
                    launchHomeScreen();
                }
            }
        });
    }
    
    private void addBottomDots(int currentPage) {
        dots = new TextView[layouts.length];
    
        int[] colorsActive = getResources().getIntArray(R.array.array_dot_active);
        int[] colorsInactive = getResources().getIntArray(R.array.array_dot_inactive);
    
        dotsLayout.removeAllViews();
        for (int i = 0; i < dots.length; i++) {
            dots[i] = new TextView(this);
            dots[i].setText(Html.fromHtml("&#9679", HtmlCompat.FROM_HTML_MODE_LEGACY));
            dots[i].setTextSize(13);
            dots[i].setTextColor(colorsInactive[currentPage]);
            dotsLayout.addView(dots[i]);
        }
    
        if (dots.length > 0)
            dots[currentPage].setTextColor(colorsActive[currentPage]);
    }
    
    private int getItem(int i) {
        return viewPager.getCurrentItem() + i;
    }
    
    private void launchHomeScreen() {
        prefManager.setFirstTimeLaunch(false);
        startActivity(new Intent(this, SplashActivity.class));
        finish();
    }
    
    //  viewpager change listener
    ViewPager.OnPageChangeListener viewPagerPageChangeListener = new ViewPager.OnPageChangeListener() {
    
        @Override
        public void onPageSelected(int position) {
            addBottomDots(position);
    
            // changing the next button text 'NEXT' / 'GOT IT'
            if (position == layouts.length - 1) {
                // last page. make button text to GOT IT
                btnNext.setText(getString(R.string.start));
                btnSkip.setVisibility(View.GONE);
            } else {
                // still pages are left
                btnNext.setText(getString(R.string.next));
                btnSkip.setVisibility(View.VISIBLE);
            }
        }
    
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
    
        }
    
        @Override
        public void onPageScrollStateChanged(int arg0) {
    
        }
    };
    
    // Making notification bar transparent
    
    private void changeStatusBarColor() {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.TRANSPARENT);
    }
    
    /**
     * View pager adapter
     */
    public class MyViewPagerAdapter extends PagerAdapter {
        private LayoutInflater layoutInflater;
    
        public MyViewPagerAdapter() {
        }
    
        @NonNull
        @Override
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    
            assert layoutInflater != null;
            View view = layoutInflater.inflate(layouts[position], container, false);
            container.addView(view);
    
            return view;
        }
    
        @Override
        public int getCount() {
            return layouts.length;
        }
    
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object obj) {
            return view == obj;
        }
    
    
        @Override
        public void destroyItem(ViewGroup container, int position, @NonNull Object object) {
            View view = (View) object;
            container.removeView(view);
        }
    }}
    
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:showIn="@layout/activity_main_intro_slider">
    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <LinearLayout
        android:id="@+id/layoutDots"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:gravity="center"
        android:orientation="horizontal">
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_above="@id/layoutDots"
        android:alpha=".5"
        android:background="@android:color/white" />
    <Button
        android:id="@+id/btn_next"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:background="@null"
        android:padding="12dp"
        android:text="@string/next"
        android:textColor="#FFFFFF" />
    <Button
        android:id="@+id/btn_skip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:background="@null"
        android:padding="12dp"
        android:text="@string/skip"
        android:textColor="#FFFFFF" />
    

    【讨论】:

    • Rajnesh 谢谢你的回答,但我希望点应该随着幻灯片移动我已经有了服装 XML 三种布局
    • 没问题!但是如果您看到我的代码,您可以将所有三个 XML 布局放入我的代码中。检查我的代码中的 layouts = new init[] 注释//欢迎滑块的布局。
    • @RajneshSharma 谢谢你的回答,但我希望点应该随着幻灯片移动我已经有服装 XML 三个布局点应该移动我已经编辑了我的问题,请检查它
    • 但我想使用我自己的库实现
    • 好吧,我对 kotlin 了解不多,所以我真的看不懂你的代码!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 2012-02-09
    • 1970-01-01
    • 2015-10-04
    • 2021-03-08
    • 1970-01-01
    • 2010-12-17
    相关资源
    最近更新 更多