需求:图片超过两张循环轮播显示
思路:首先不能在主线程上写一个死循环轮播对吧,运行久了有可能主线程会卡顿。
新开一个子线程,另外你要操作界面上的东西,还需要Handler结合一起使用,循环轮播很简单就能想到用求余方法,还有一点它要超过两张才循环,少于两张即不循环
所以还有一个变量来控制是否线程里面内容是否一直循环下去,不过线程还是存在的,希望不要多次new线程出来。
下面基本代码:
private boolean running = true;
private ArrayList<TopicManagerListInfo> adminPathList=new ArrayList<TopicManagerListInfo>();
private int newPosition = 0;
private Thread managerPathThread;
if(managerPathThread==null){
managerPathThread=new Thread(r);
managerPathThread.start();
}
@Override
protected void onDestroy() {
super.onDestroy();
instance = null;
running = false;
}
private Runnable r = new Runnable() {
@Override
public void run() {
while (running) {
handler.sendEmptyMessage(0);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
@Override
protected void onStop() {
running = false;
super.onStop();
}
@Override
protected void onRestart() {
running=true;
super.onRestart();
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//轮播循环
if(adminPathList !=null ) {
adminPortraitLoop(adminPathList);
}
}
};
private void adminPortraitLoop(ArrayList<TopicManagerListInfo> adminList){
if(adminList !=null && adminList.size()>0){
int size=adminList.size();
if(newPosition==Integer.MAX_VALUE){
newPosition=0;
}
int position = newPosition % size;
if(position==(size-1)){
topic_admin_portrait2.setImageURI(Uri.parse(adminList.get(0).getAvatarPath()));
}else{
topic_admin_portrait2.setImageURI(Uri.parse(adminList.get(position+1).getAvatarPath()));
}
topic_admin_portrait1.setImageURI(Uri.parse(adminList.get(position).getAvatarPath()));
newPosition++;
}
}