ViewPager輪播圖 Banner方式實現
阿新 • • 發佈:2018-11-22
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>