1.提取的基类
package com.example.viewpager_demo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutResId());
//初始化视图
initView();
//加载数据
initData();
}
protected abstract int getLayoutResId();
//初始化视图
protected abstract void initView();
//加载数据
protected abstract void initData();
}
2.BunnerActivity主页面
package com.example.viewpager_demo;
import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import com.example.Bean.BunnerBean;
import com.example.Util.NetUtils;
import com.youth.banner.Banner;
import com.youth.banner.BannerConfig;
import com.youth.banner.loader.ImageLoaderInterface;
import java.util.ArrayList;
import java.util.List;
public class BunnerActivity extends BaseActivity {
private Banner banner;
private String imageUrl = "https://api.tianapi.com/wxnew/?key=605fa0a929c8d8b116424df0510c6b2a&num=6&page=1";
@Override
protected int getLayoutResId() {
return R.layout.activity_bunner;
}
//初始化view
@Override
protected void initView() {
//获取资源id
banner = findViewById(R.id.bunner);
//设置banner样式
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
//设置图片加载器
banner.setImageLoader(new ImageLoaderInterface<ImageView>() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
BunnerBean.NewslistBean bean = (BunnerBean.NewslistBean) path;
com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(
bean.getPicUrl(),imageView
);
}
@Override
public ImageView createImageView(Context context) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
return imageView;
}
});
}
@Override
protected void initData() {
NetUtils.getInstance().getRequest(imageUrl, BunnerBean.class, new NetUtils.CallBack<BunnerBean>() {
@Override
public void onSuccess(BunnerBean o) {
//设置图片集合
banner.setImages(o.getNewslist());
banner.setBannerTitles(getTitles(o));
//banner设置的方法全部调用完是最后执行
banner.start();
}
});
}
private List<String> getTitles(BunnerBean o) {
List<String> list = new ArrayList<>();
for(BunnerBean.NewslistBean banner:o.getNewslist()){
list.add(banner.getTitle());
}
return list;
}
}
3.工具类
package com.example.Util;
import android.annotation.SuppressLint;
import android.os.AsyncTask;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class NetUtils {
private static NetUtils instance;
private Gson gson;
public NetUtils() {
gson = new Gson();
}
public static NetUtils getInstance() {
if(instance == null){
instance = new NetUtils();
}
return instance;
}
//执行一个网络请求返回string
public String getRequest(String urlStr){
String result = "";
try {
//定义url地址
URL url = new URL(urlStr);
//打开连接
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//设置请求格式
urlConnection.setRequestMethod("GET");
//设置超时
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
//获取请求码
int responseCode = urlConnection.getResponseCode();
if(responseCode == 200){
result = stream2String(urlConnection.getInputStream());
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
//将字节流转换为字符流
private String stream2String(InputStream inputStream) throws IOException {
StringBuilder builder = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
for (String tmp = br.readLine();tmp!=null;tmp = br.readLine()){
builder.append(tmp);
}
return builder.toString();
}
//执行一个网络请求返回bean
public <E> E getRequest(String urlStr,Class clazz){
return (E) gson.fromJson(getRequest(urlStr),clazz);
}
//定义接口
public interface CallBack<E>{
void onSuccess(E e);
}
//异步 回调请求
@SuppressLint("StaticFieldLeak")
public void getRequest(String urlStr, final Class clazz, final CallBack callBack){
new AsyncTask<String,Void,Object>(){
@Override
protected Object doInBackground(String... strings) {
return getRequest(strings[0],clazz);
}
@Override
protected void onPostExecute(Object o) {
callBack.onSuccess(o);
}
}.execute(urlStr);
}
}
4.bean类
package com.example.Bean;
import java.util.List;
public class BunnerBean {
private int code;
private String msg;
private List<NewslistBean> newslist;
private final int SUCCESS_CODE = 200;
public boolean isSuccess(){
return SUCCESS_CODE == code;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public List<NewslistBean> getNewslist() {
return newslist;
}
public void setNewslist(List<NewslistBean> newslist) {
this.newslist = newslist;
}
public static class NewslistBean {
private String ctime;
private String title;
private String description;
private String picUrl;
private String url;
public String getCtime() {
return ctime;
}
public void setCtime(String ctime) {
this.ctime = ctime;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getPicUrl() {
return picUrl;
}
public void setPicUrl(String picUrl) {
this.picUrl = picUrl;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
5.布局页面
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.youth.banner.Banner
android:id="@+id/bunner"
android:layout_width="0dp"
android:layout_height="200dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:indicator_width="8dp"
app:indicator_height="8dp"
app:indicator_drawable_selected="@drawable/shape_sel_dot"
app:indicator_drawable_unselected="@drawable/shape_normal_dot"
/>
</android.support.constraint.ConstraintLayout>
6.Banner需要导入的依赖
compile 'com.youth.banner:banner:1.4.10'
7.轮播图小圆点
7.1默认圆点颜色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<size
android:width="8dp"
android:height="8dp"
/>
<solid
android:color="#909090"
/>
</shape>
7.2选中圆点颜色
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<size
android:width="8dp"
android:height="8dp"
/>
<solid
android:color="#900000"
/>
</shape>
7.3select设置选中
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_sel_dot" android:state_selected="true"></item>
<item android:drawable="@drawable/shape_normal_dot" ></item>
</selector>