android轮播图引导页(因为是引导页,所以不具备自动轮播的功能) 示例: 代码后面有数字,3.1开始就是开始做小圆点 //分为三个部分 (1)布局 activity_lun_bo_main.xml ?xml version="1.0" enco
          android轮播图引导页(因为是引导页,所以不具备自动轮播的功能)
示例:

代码后面有数字,3.1开始就是开始做小圆点
//分为三个部分
(1)布局
activity_lun_bo_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.viewpager.widget.ViewPager android:id="@+id/app_lunbotu" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:id="@+id/app_points_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="40px" android:gravity="center" android:orientation="horizontal"> </LinearLayout> <!-- android:layout_alignParentBottom="true"此属性是让点浮在图片上放的操作 android:layout_height="wrap_content" 注意这个,要不是wrap_content会使小圆点显示在中间--> </RelativeLayout>
1.2下面是小圆点的两个布局(大小,颜色),因为颜色不一样,所以要分开定义
shape_point_normal.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!-- shape="oval"圆形--> <size android:width="40px" android:height="40px"/> <solid android:color="#dfdfdf"/> </shape>
shape_point_selected.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="40px" android:height="40px"/> <solid android:color="#ff4300"/> </shape>
LunBoMainActivity
(2)第二步(主要MainActivity)
package com.example.myapplication.lunbotu;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.LinearLayout;
import com.example.myapplication.R;
import java.util.ArrayList;
import java.util.List;
public class LunBoMainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
    private ViewPager mViewPager;
    private LunboAdapter mLunboAdapter;//适配器
    private static List<Integer> sImas= new ArrayList<>();//装图片的列表
    private LinearLayout mPointContainer;//加小圆点,声明线性布局
    
    static {
    //这是四张图片
        sImas.add(R.mipmap.yingdao1);
        sImas.add(R.mipmap.yingdao2);
        sImas.add(R.mipmap.yingdao3);
        sImas.add(R.mipmap.yingdao4);
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lun_bo_main);
        //调用方法完成图片的轮播
        initView();
    }
    private void initView() {
        mViewPager = findViewById(R.id.app_lunbotu);
        mLunboAdapter = new LunboAdapter();
        mLunboAdapter.setData(sImas);//设置数据
        mViewPager.setAdapter(mLunboAdapter);
        //以上四步是普通的轮播图
        mViewPager.addOnPageChangeListener(this);//3.4
        mPointContainer = findViewById(R.id.app_points_container);//3.2
        insertPoint();//3.1
        //下面这一步是无限轮播图
        mViewPager.setCurrentItem(mLunboAdapter.getDataRelasize()*100,false);//false是否做动画
    }
    private void insertPoint() {
        //把点放进去,3.3
        for(int i=0;i<sImas.size();i++){
            View point = new View(this);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40,40);//这是点的大小
            layoutParams.leftMargin = 20;//这是点之间的间距
            point.setLayoutParams(layoutParams);
            point.setBackground(getResources().getDrawable(R.drawable.shape_point_normal));//设置背景
            mPointContainer.addView(point);
        }
    }
    //以下是3.5
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    }
    @Override
    public void onPageSelected(int position) {
        //3.5
        //这个方法的调用其实是viewPager停下来以后选中的位置
        int realPosition;
        if(mLunboAdapter.getDataRelasize() != 0){
            realPosition = position%mLunboAdapter.getDataRelasize();
        }else{
            realPosition = 0;
        }
        setSelectPoint(realPosition);//3.6
    }
    private void setSelectPoint(int realPosition) {
        //这个方法是3.6
        for (int i=0;i<mPointContainer.getChildCount();i++){
            View point = mPointContainer.getChildAt(i);
            if(i != realPosition){
                //那就是白色
                point.setBackgroundResource(R.drawable.shape_point_normal);
            }else {
                //选中的颜色
                point.setBackgroundResource(R.drawable.shape_point_selected);
            }
        }
    }
    @Override
    public void onPageScrollStateChanged(int state) {
    }
}
LunboAdapter
(3)第三步(适配器)
package com.example.myapplication.lunbotu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.PagerAdapter;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import java.util.List;
public class LunboAdapter extends PagerAdapter {
    private List<Integer> sImastwo ;
    @Override
    public int getCount() {
        if(sImastwo != null){
            return Integer.MAX_VALUE;//(图片无限)(注意这里是Integer)
        }
        return 0;
    }
    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        int relaNum = position%sImastwo.size();
        ImageView imageView = new ImageView(container.getContext());//获取当前的组件
        imageView.setImageResource(sImastwo.get(relaNum));//使无限
        container.addView(imageView);//将视图添加到组件中(类似java中的操作)
        return imageView;
    }
    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        //销毁(让可以循环使用,不会使内存溢出)
        container.removeView((View)object);
    }
    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        //判断,View是否与instantiateItem方法返回的Object有联系,有联系则返回true,即返回的对象为所要创建的View时,显示该View
        return view == object;
    }
    public void setData(List<Integer> sImas) {
        //之前sImastwo是空的,现在已经有图片在里面了
        sImastwo=sImas;
    }
    public int getDataRelasize() {
        if(sImastwo != null){
            return sImastwo.size();
        }else{
            return 0;
        }
    }
}
防止我忘记,记录一下mipmap的位置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
