viewPager最简单无限轮播加左右滑动
首先是xml布局:
<androidx.viewpager.widget.ViewPager android:id="@+id/loopviewpager" android:layout_width="match_parent" android:layout_height="150dp" />
主类:
public class PushOfferActivity extends Activity {
private ViewPager viewPager; //轮播图模块 private int[] mImg; private ArrayList<ImageView> mImgList; private LinearLayout ll_dots_container; private int previousSelectedPosition = 0;//点的位置 boolean isRunning = false; @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_push); initLoopView(); //实现轮播图 }
private void initLoopView() {
Point p = Common.getInstance().getRelSize(); int width = p.x; viewPager = (ViewPager)findViewById(R.id.loopviewpager); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,width*4/5); viewPager.setLayoutParams(params); ll_dots_container = (LinearLayout)findViewById(R.id.ll_dots_loop); // 图片资源id数组 mImg = new int[]{
R.drawable.logo_1, R.drawable.logo_2, R.drawable.logo_3, }; // 初始化要展示的5个ImageView mImgList = new ArrayList<ImageView>(); ImageView imageView; View dotView; LinearLayout.LayoutParams layoutParams; for(int i=0;i<mImg.length;i++){
//初始化要显示的图片对象 imageView = new ImageView(this); imageView.setBackgroundResource(mImg[i]); mImgList.add(imageView); //加引导点 dotView = new View(this); dotView.setBackgroundResource(R.drawable.dot); layoutParams = new LinearLayout.LayoutParams(15,15); if(i!=0){
layoutParams.leftMargin=10; }
//设置默认所有都不可用 dotView.setEnabled(false); ll_dots_container.addView(dotView,layoutParams); }
ll_dots_container.getChildAt(0).setEnabled(true); previousSelectedPosition=0; //设置适配器 viewPager.setAdapter(new LoopViewAdapter(mImgList)); // 开启轮询 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override public void onPageScrolled(int i, float v, int i1) {
}
@Override public void onPageSelected(int i) {
int newPosition = i % mImgList.size(); ll_dots_container.getChildAt(previousSelectedPosition).setEnabled(false); ll_dots_container.getChildAt(newPosition).setEnabled(true); previousSelectedPosition = newPosition; }
@Override public void onPageScrollStateChanged(int i) {
}
}); new Thread(){
public void run(){
isRunning = true; while(isRunning){
try{
Thread.sleep(3000); } catch (InterruptedException e) {
e.printStackTrace(); }
//下一条 runOnUiThread(new Runnable() {
@Override public void run() {
if(viewPager.getCurrentItem() ==mImgList.size()-1){
viewPager.setCurrentItem(0); }else{
viewPager.setCurrentItem(viewPager.getCurrentItem()+1); }
}
}); }
}
}.start(); }
}
适配器:
private ArrayList<ImageView> imageViewList;public LoopViewAdapter(ArrayList<ImageView> mImgList) {
imageViewList = mImgList;}
// 1. 返回要显示的条目内容, 创建条目@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(imageViewList.get(position), 0); return imageViewList.get(position);}
@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(imageViewList.get(position));}
@Overridepublic int getCount() {
return imageViewList.size();}
@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;}
这里我说有,网上有的说将getCount设置为无限大,这样就能过实现轮播,我当时也试了,可以,但是!!!!!这个时候你反方向滑动就会出现崩溃!!!!
请先 后发表评论~