突然想做一些东西的分享了,找到一个以前写的Demo,给大家分享一下。。。
先来看一下效果图:
首先我们需要在布局文件中做一个布局的嵌套用来实现Viewpage和小圆点的存放位置。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.customcarousel.MainActivity"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v4.view.ViewPager android:id="@+id/home_viewpager" android:layout_width="match_parent" android:layout_height="200dp"></android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/home_linearlayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="right" android:orientation="horizontal"></LinearLayout> </RelativeLayout> </RelativeLayout>
一个Viewpager的适配器这没啥可讲解的。
package com.example.customcarousel; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import java.util.List; /** * Created by 联想 on 2017/6/22. */ public class PublicViewPagerAdapter extends PagerAdapter { private List<View> list; public PublicViewPagerAdapter(List<View> list) { this.list = list; } @Override public int getCount() { return list.size(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(list.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { if (list.get(position) != null) { container.removeView(list.get(position)); } container.addView(list.get(position)); return list.get(position); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }
这里面有我做的一个简单的封装,里面都有注释。
package com.example.customcarousel; import android.app.Activity; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import com.bumptech.glide.Glide; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; /** * Created by 联想 on 2017/6/22. */ public class ViewPagerUtils implements ViewPager.OnPageChangeListener{ private static ViewPagerUtils utils; private List<View> list; private String[] ints; private LinearLayout linlayout; private Activity con; private ViewPager viewPagers; public ViewPagerUtils() { } public static synchronized ViewPagerUtils getIntance(){ if(utils==null){ utils = new ViewPagerUtils(); } return utils; } public void setpager(Context context,final String[] in,final LinearLayout linearLayout, ViewPager viewPager){ list = new ArrayList<View>(); ints= in; Log.d("TAG","list____"+list.size()+"ints-----"+ints.length); con = (Activity) context; linlayout = linearLayout; viewPagers=viewPager; for (int i = 0; i <in.length ; i++) { //存储七个imageview对象 ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY);
Glide.with(context).load(in[i]) // .skipMemoryCache(true) // .thumbnail(0.05f) // .diskCacheStrategy(DiskCacheStrategy.ALL) // .override(360,200) .into(imageView); list.add(imageView); View view = new View(context); view.setBackgroundResource(R.drawable.point_normal); LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(20,20); params.setMargins(10,0,0,0); linearLayout.addView(view,params); } linearLayout.getChildAt(0).setBackgroundResource(R.drawable.point_selected); PublicViewPagerAdapter homePagePagerAdapter = new PublicViewPagerAdapter(list); viewPager.setAdapter(homePagePagerAdapter); viewPager.setOnPageChangeListener(this); viewPager.setCurrentItem(0); Timer timer = new Timer(true); timer.schedule(timerTask, 2000, 2000); } //页面滑动的时候调用(一直被调用) @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //页面被选中的时候调用(关联下面的几个点) @Override public void onPageSelected(int position) { int newPosition= position%list.size(); for(int i = 0; i <ints.length ; i++) { if(i==newPosition){ //如果相等 就将i对应的点设置为选中状态,其他点都是设置成未选中状态 linlayout.getChildAt(i).setBackgroundResource(R.drawable.point_selected); }else{ linlayout.getChildAt(i).setBackgroundResource(R.drawable.point_normal); } } } //页面滑动状态发生改变的时候调用 停止滑动 开始滑动 @Override public void onPageScrollStateChanged(int state) { } //轮播计时器 private TimerTask timerTask = new TimerTask() { @Override public void run() { con.runOnUiThread(new Runnable() { @Override public void run() { if (viewPagers.getCurrentItem() >= (ints.length - 1)) { viewPagers.setCurrentItem(0); } else { viewPagers.setCurrentItem(viewPagers.getCurrentItem() + 1); } } }); } }; }