此代码实现:
首先无限轮播的实现,
当按住轮播图时,无限轮播停止 ,可以滑动图片, 小圆点跟着改变
当停止滑动时,有实现自动轮播
一.设置小圆点
在drawable 目录下 创建shape 文件:
创建两个文件:
point_selected.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<solid android:color="#f00"></solid>
</shape>
point_un_selected.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#ccc"></solid>
</shape>
二.布局
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/lin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignBottom="@+id/vp"
android:gravity="center"
android:layout_marginBottom="7dp"
>
</LinearLayout>
三.main方法:
private ViewPager vp;
private ImageView imageView;
//存放图片地址的集合
List<String> list = new ArrayList<>();
//存放小圆点的集合
List<ImageView> imageViews;
private LinearLayout linearLayout;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
//获取当前正在显示的页面
int index = vp.getCurrentItem();
//设置显示的页面
vp.setCurrentItem(index+1);
//改变小圆点
setSelectedPoint(index%list.size());
//延迟发送消息
sendEmptyMessageDelayed(1,2000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件
vp = (ViewPager) findViewById(R.id.vp);
linearLayout = (LinearLayout) findViewById(R.id.lin);
//向集合中添加地址
list.add("http://img4.imgtn.bdimg.com/it/u=691759172,804438098&fm=214&gp=0.jpg");
list.add("http://k.zol-img.com.cn/sjbbs/7099/a7098662_s.jpg");
list.add("http://f2.topitme.com/2/44/48/11321074391a748442o.jpg");
//初始化小圆点圆点
initdata();
//设置适配器
vp.setAdapter(new Myadapter());
//设置当前显示页面(可以左右滑动)
vp.setCurrentItem(list.size()*100);
//实现自动播放
handler.sendEmptyMessageDelayed(1,2000);
//切换页面监听
vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//设置小圆点
setSelectedPoint(position%list.size());
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
//触摸监听
vp.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action=event.getAction();
switch (action){
case MotionEvent.ACTION_DOWN:
Log.d("zzz","--按下--");
//清空handler消息
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_UP:
Log.d("zzz","--抬起--");
//当停止触摸时,重新发消息 无限轮播
handler.sendEmptyMessageDelayed(1,2000);
break;
case MotionEvent.ACTION_MOVE:
Log.d("zzz","--移动--");
break;
case MotionEvent.ACTION_CANCEL:
Log.d("zzz","--取消--");
break;
}
return false;
}
});
}
//适配器
class Myadapter extends PagerAdapter{
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(MainActivity.this);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//从网络上获取图片 ,需要到入一个Myapp的工具类
ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView,MyApp.getDefaultDisplayOption());
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// super.destroyItem(container, position, object);
container.removeView((View) object);
}
}
//设置小圆点的方法
public void setSelectedPoint(int index)
{
for (int i=0;i<imageViews.size();i++)
{
if(i==index)
{
imageViews.get(i).setImageResource(R.drawable.point_selected);
}else
{
imageViews.get(i).setImageResource(R.drawable.point_un_selected);
}
}
}
//初始化小圆点 动态
public void initdata()
{
//创建存放小圆点的集合
imageViews = new ArrayList<>();
for(int i=0;i<list.size();i++)
{
imageView = new ImageView(this);
//设置图片的缩放模式
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//设置要显示的图片
if(i==0)
{
imageView.setImageResource(R.drawable.point_selected);
}else{
imageView.setImageResource(R.drawable.point_un_selected);
}
//设置宽度与高度
LinearLayout.LayoutParams Params = new LinearLayout.LayoutParams(40, 40);
Params.setMargins(10,0,10,0);
//添加到底部容器中
linearLayout.addView(imageView,Params);
//添加到集合中
imageViews.add(imageView);
}
}