Android Viewpager 指示點(diǎn)

先上效果圖:

image.png

實(shí)現(xiàn)思路:

利用LinearLayout 動(dòng)態(tài)添加ImageView ,然后在頁面初始化的生活,畫出來,在viewpager 的current item 的生活,更換相關(guān)的點(diǎn)的樣式,完成指示點(diǎn)的效果

代碼實(shí)現(xiàn):

點(diǎn)配置

綠點(diǎn)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval"
  >
  <solid android:color="@color/colorAccent"/>
  <size
      android:height="10dp"
      android:width="10dp"
      />


</shape>

白點(diǎn)

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval"
  >
  <solid android:color="#fff"/>
  <size
      android:height="8dp"
      android:width="8dp"
      />


</shape>

View 實(shí)現(xiàn)

package com.jimdear.espresssiondemo.view;

import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
import androidx.viewpager.widget.ViewPager;
import com.jimdear.espresssiondemo.R;
import java.util.ArrayList;
import java.util.Objects;

 
public class PointIndicatorView extends LinearLayout {
    public ViewPager viewPager;

    public PointIndicatorView(Context context) {
        super(context);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            initView();
        }
    }

    public PointIndicatorView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            initView();
        }
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    public void initView() {
        setOrientation(HORIZONTAL);
        setGravity(Gravity.CENTER);

    }

    public void setViewPager(ViewPager viewPager) {
        this.viewPager = viewPager;
    }

    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    public void setPointScrollView() {
        int pointNumbers = Objects.requireNonNull(viewPager.getAdapter()).getCount();
        final ArrayList<ImageView> arrayList = new ArrayList<>();
        for (int i = 0; i < pointNumbers; i++) {
            ImageView imageView = new ImageView(getContext());
            imageView.setBackgroundResource(R.drawable.circule_white_point);
            imageView.setTag(i);
            FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
                    ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            layoutParams.gravity = TEXT_ALIGNMENT_CENTER;
            layoutParams.rightMargin = 30;
            imageView.setLayoutParams(layoutParams);
            addView(imageView);
            arrayList.add(imageView);
        }
        paintCirculateView(viewPager.getCurrentItem(), arrayList);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                paintCirculateView(position, arrayList);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });


    }

    private void paintCirculateView(int position, ArrayList<ImageView> arrayList) {
        for (ImageView imageView : arrayList) {
            if ((int) imageView.getTag() == position) {
                imageView.setBackgroundResource(R.drawable.circule_point);
            } else {
                imageView.setBackgroundResource(R.drawable.circule_white_point);
            }
        }
    }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容