package com.haha.administrator.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
private final int handlerStart=0x0011;
private final int handlerEnd=0x0022;
private ViewPager vp;
private Handler handler=new Handler(){
boolean auto=true;
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what==handlerEnd) {
auto = false;
handler.removeMessages(1);//取消可能一会会发过来但是还没执行的消息,如果不取消的话,手指触摸屏幕事件不足2s很可能会导致轮播速度越来越快
}
if (auto==true&msg.what==1){
vp.setCurrentItem(vp.getCurrentItem()+1);
handler.sendEmptyMessageDelayed(1,2000);
}
if (msg.what==handlerStart){
auto=true;
handler.sendEmptyMessage(1);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<View> views = new ArrayList<>();
LayoutInflater inflater = getLayoutInflater();
for (int i=0;i<10;i++){
views.add(inflater.inflate(R.layout.iv_item, null,false));
}
for (int i = 0; i < views.size(); i++) {
ImageView miv = (ImageView) ((View) views.get(i)).findViewById(R.id.miv);
TextView tv = (TextView) ((View) views.get(i)).findViewById(R.id.tv);
tv.setText(i+"");
Glide.with(this)
.load(R.mipmap.ic_launcher)
.into(miv);
//这是个图片加载控件,超好用,还能加载网络图片
}
vp = ((ViewPager) findViewById(R.id.vp));
vp.setAdapter(new PagerAdapter() {
int vSize = views.size();
@Override
public int getCount() {
return (views.size());
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager)container).removeView(views.get(position%vSize));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = views.get(position%vSize);
((ViewPager) container).addView(view,0);
return view;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
});
vp.setCurrentItem(1);
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position==views.size()-1){
vp.setCurrentItem(0);//当到了最后一个页面时,自动跳转到第0个页面
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
handler.sendEmptyMessage(1);
vp.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_UP) {
handler.sendEmptyMessage(handlerStart);
}
else
handler.sendEmptyMessage(handlerEnd);
return false;
}
});
}
}
注意:
1.最后一个应该是没有内容的,懒癌晚期算一就随便加了个ImageView
2.设置ViewPager的OnTouchListener,当手指在ViewPager里时让ViewPager停止播放,当手指离开时让ViewPager继续播放
3.在让ViewPager停止播放时,因为上一次的Message是延迟2s发送的,所以要移除掉还没执行的这个msg