我们需要有一个空白的fragment,以及与之对应的layout,还需要一个PagerAdapter的Java类
这里面的example1,2,3,4,5均为示例图片,自己添加即可,放在mipmap文件夹中
这里面的point_normal,point_focus为两个小圆点图片,一个为灰色,一个为鲜艳颜色,也是放在mipmap文件夹中。
这是fragment中的代码:
import android.os.Bundle; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.viewpager.widget.ViewPager; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class HomeFragment extends Fragment { ViewPager homeVp; LinearLayout pointLayout; //声明图片数组 int[]imgIds={R.mipmap.example1,R.mipmap.example2,R.mipmap.example3,R.mipmap.example4,R.mipmap.example5}; //声明Viewpager的数据源 List<ImageView> ivList; //声明管理指示器小圆点集合 List<ImageView>pointList; //完成定时装置,实现自动滑动的效果 Handler handler=new Handler(){ @Override public void handleMessage(@NonNull Message msg){ if (msg.what==1) { //获取当前viewpager显示的页面 int currentItem= homeVp.getCurrentItem(); //判断是否为最后一张,如果是,回到第一张 if (currentItem==ivList.size()-1) { homeVp.setCurrentItem(0); }else { currentItem++; homeVp.setCurrentItem(currentItem); } //形成循环 handler.sendEmptyMessageDelayed(1,2500); } } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view= inflater.inflate(R.layout.fragment_home, container, false); initView(view); initPager(); setVPListener(); //延迟五秒钟发送一条消息,通知可以切换viewpager的图片了 handler.sendEmptyMessageDelayed(1,5000); return view; } /*设置viewPager的监听器函数*/ private void setVPListener() { homeVp.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ @Override public void onPageSelected(int position) { for (int i = 0; i < pointList.size(); i++) { pointList.get(i).setImageResource(R.mipmap.point_normal); } pointList.get(position).setImageResource(R.mipmap.point_focus); } }); } /*设置ViewPager显示的页面*/ private void initPager() { ivList=new ArrayList<>(); pointList=new ArrayList<>(); for (int i = 0; i < imgIds.length ; i++) { ImageView iv = new ImageView(getContext()); iv.setImageResource(imgIds[i]); iv.setScaleType(ImageView.ScaleType.FIT_XY); //设置图片view的宽高 LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); iv.setLayoutParams(lp); //将图片view加载到集合当中 ivList.add(iv); //创建图片对应的指示器小圆点 ImageView piv=new ImageView(getContext()); piv.setImageResource(R.mipmap.point_normal); LinearLayout.LayoutParams plp=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); plp.setMargins(20,0,0,0); piv.setLayoutParams(plp); //将小圆点加到布局当中 pointLayout.addView(piv); //为了便于操作,将小圆点添加到统一管理的集合中 pointList.add(piv); } //默认第一个小圆点是获取焦点的状态 pointList.get(0).setImageResource(R.mipmap.point_focus); HomePagerAdapter HomePagerAdapter = new HomePagerAdapter(getContext(), ivList); homeVp.setAdapter(HomePagerAdapter); } /*初始化控件操作*/ private void initView(View view) { homeVp=view.findViewById(R.id.homefrag_vp); pointLayout=view.findViewById(R.id.homefrag_layout); } }
这是与fragment对应的layout中的布局代码:
<?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="match_parent" android:orientation="vertical" android:background="@color/bgyellow" > <androidx.viewpager.widget.ViewPager android:layout_width="match_parent" android:layout_height="220dp" android:id="@+id/homefrag_vp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="10dp" android:orientation="horizontal" android:layout_alignBottom="@+id/homefrag_vp" android:layout_marginBottom="10dp" android:gravity="center_horizontal" android:id="@+id/homefrag_layout"/> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/homefrag_layout1" android:orientation="vertical" android:layout_below="@id/homefrag_vp" android:layout_marginTop="80dp"/> </RelativeLayout>
这是HomePagerAdapter中的Java代码:
import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import java.util.List; public class HomePagerAdapter extends PagerAdapter { Context context; List<ImageView> imgList; public HomePagerAdapter(Context context, List<ImageView> imgList) { this.context = context; this.imgList = imgList; } @Override public int getCount() { return imgList.size(); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = imgList.get(position); container.addView(imageView); return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { ImageView imageView = imgList.get(position); container.removeView(imageView); } }