无限轮播
布局
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="wrap_content"
android:layout_height="300dp"></android.support.v4.view.ViewPager>
<RadioGroup
android:id="@+id/radio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></RadioGroup>
</android.support.constraint.ConstraintLayout>
创建Appliaction
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration);
}
}
主页面实现
public class MainActivity extends AppCompatActivity {
private ViewPager pager;
private List<ImageView> list=new ArrayList<>();
Handler handler=new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager = (ViewPager)findViewById(R.id.pager);
getServerData();
}
private void getServerData() {
MyAsyncTask task = new MyAsyncTask();
task.execute();
}
private class MyAsyncTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
String path = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=banner";
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.close();
inputStream.close();
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
Log.i("xxx", e.toString());
}
return null;
}
@Override
protected void onPostExecute(String s) {
Log.i("xxx", s);
try {
JSONObject jsonObject = new JSONObject(s);
JSONArray banner = jsonObject.getJSONArray("banner");
for (int i = 0; i < banner.length(); i++) {
JSONObject jsonObject1 = banner.getJSONObject(i);
String image_url = jsonObject1.getString("image_url");
//创建ImageView
ImageView imageView = new ImageView(MainActivity.this);
ImageLoader.getInstance().displayImage(image_url, imageView);
//把ImageView添加给集合
list.add(imageView);
}
MyViewPagerAdapter adapter = new MyViewPagerAdapter();
pager.setAdapter(adapter);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
//设置轮播图适配器
private class MyViewPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
position=position%list.size();
ImageView imageView = list.get(position);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
private void startBanner(){
handler.postDelayed(new Runnable() {
@Override
public void run() {
int currentItem = pager.getCurrentItem();
currentItem++;
pager.setCurrentItem(currentItem);
handler.postDelayed(this,2000);
}
},2000);
}
private void stopBanner(){
handler.removeCallbacksAndMessages(null);
}
//开始轮播
@Override
protected void onResume() {
super.onResume();
startBanner();
}
//停止轮播
@Override
protected void onPause() {
super.onPause();
stopBanner();
}
//处理handler造成的内存泄漏
@Override
protected void onDestroy() {
super.onDestroy();
stopBanner();
}
}