1.布局
依赖
implementation 'com.youth.banner:banner:1.4.10'
<?xml version="1.0" encoding="utf-8"?>
<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">
<com.youth.banner.Banner
android:id="@+id/banner1"
android:layout_width="match_parent"
android:layout_height="200dp"></com.youth.banner.Banner>
</android.support.constraint.ConstraintLayout>
2.主页面
package com.bw.ymy.lunbo;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import com.nostra13.universalimageloader.core.ImageLoader;
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 MainActivity extends AppCompatActivity {
private Banner banner1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源id
banner1=findViewById(R.id.banner1);
//设置文字
banner1.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
banner1.setImageLoader(new ImageLoaderInterface<ImageView>() {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Bean.NewslistBean bean= (Bean.NewslistBean) path;
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;
}
});
indata();
}
private void indata()
{
Netiul.getInstance().getRequest("https://api.tianapi.com/wxnew/?key=c4aa776e0a51d57d6750511e2baa46b6&num=6&page=1",
Bean.class,new Netiul.Callback<Bean>()
{
@Override
public void onsuccess(Bean bean) {
banner1.setImages(bean.getNewslist());
banner1.setBannerTitles(getTitles(bean));
banner1.start();
}
});
}
private List<String> getTitles(Bean bannerResponse) {
List<String> list = new ArrayList<>();
for (Bean.NewslistBean banner: bannerResponse.getNewslist()) {
list.add(banner.getTitle());
}
return list;
}
}
3.工具类
package com.bw.ymy.lunbo;
import android.os.AsyncTask;
import android.provider.CallLog;
import com.google.gson.Gson;
import com.youth.banner.Banner;
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 Netiul {
public static Netiul instance;
public Netiul() {
}
public static Netiul getInstance()
{
if(instance==null)
{
instance=new Netiul();
}
return instance;
}
public interface Callback<T>{
void onsuccess(T t);
}
public void getRequest(final 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);
}
public <T> T getRequest(String urlStr,Class clazz)
{
return (T) new Gson().fromJson(getRequest(urlStr),clazz);
}
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();
}
}
4.App
package com.bw.ymy.lunbo;
import android.app.Application;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoader.getInstance().init(
new ImageLoaderConfiguration.Builder(this)
.memoryCacheSizePercentage(10)
.discCacheSize(50 * 1024 * 1024)
.defaultDisplayImageOptions(
new DisplayImageOptions.Builder()
.showImageOnFail(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.cacheInMemory(true)
.cacheOnDisk(true)
.build()
)
.build()
);
}
}
5.Bean类
package com.bw.ymy.lunbo;
import java.util.List;
public class Bean {
/**
* code : 200
* msg : success
* newslist : [{"ctime":"2018-11-18","title":"普通人的汽车基础知识到底有多差?","description":"易车","picUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/tXmTSicVPQ6enLlOibt3RlJsElhn3s1HU26m15CuHDMvWKU0g4xCEadHksFVdzkdibHVRUQlibBsttpMicE64ib8LCTw/0?wx_fmt=jpeg","url":"https://mp.weixin.qq.com/s?src=11×tamp=1542540609&ver=1252&signature=eMbdrP2jsY3rO29rXPW0Mz3YTbYZIwL8JT9LjdhLdvUaZ3CSWe*NqMvBtI3P9jItt6urlZ*HbhICMVsBzZcZzBaNDj7ovAaBcoDv7bvk*BuVfBfQElBent5ZfHSnUiJk&new=1"},{"ctime":"2018-11-18","title":"韦德可能没法大帽詹姆斯了。詹姆斯输球了还要被为难。","description":"詹姆斯说","picUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/geLkPvpOhUSO2UZDgmdp9iaHwC8syFWAPnS6wf5Xq8HRY3TVjbhMZQJTdYyLiaBLNB8kg1Q99ZMLicokH702Yclyg/0?wx_fmt=jpeg","url":"https://mp.weixin.qq.com/s?src=11×tamp=1542540620&ver=1252&signature=*Jkik6mGD1Zjx20taBuMMyI01LxdBjrST1Hl9qhvOWpbDZCpUbM*a4SxO4cFUWEgZp*TY6ASE2jRvdjWqCP7WiowIDj0LPxLZxF4A6rErNu4YIbRkoaIufCbUHs*D8GJ&new=1"},{"ctime":"2018-11-18","title":"赛季首个60分诞生!乔老板还舍得交易他吗?","description":"腾讯NBA","picUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/OQeAz51Lq7JibYuSOIN7rzSr9BqczGSCSnx4oUoEZgGPTlgNOBuIJyObDOiaTwaAKebqzlRtfXJ9uyM6E7er85Cw/0?wx_fmt=jpeg","url":"https://mp.weixin.qq.com/s?src=11×tamp=1542540620&ver=1252&signature=Ww97b063b9rf0C2OQhdWhCCr74SFNozO6bNuXNeWWl1is6XAzr6KnhtaKBHWDua50*jAbV51OY9MneKP9sAS2Z*tctHx4tGPbposKhE6SMP0vWe5XvzUH5zAat0a5coQ&new=1"},{"ctime":"2018-11-18","title":"中国移动:5G时代每月人均流量至少60GB","description":"电脑报","picUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/HrhrgxCloNaicMKjagZsNzVnsVCkAhwFSPyJQu8l5w71cfgwfKaHArMWCna3zYAdLAnRd6NBKbg2icdfmSWyZiaWQ/0?wx_fmt=jpeg","url":"https://mp.weixin.qq.com/s?src=11×tamp=1542540606&ver=1252&signature=HGPVWHZAaOPdxUZbFx4o79dHIwvT4DniBaLk1Li-b0pkbywkWwZqurbDiFEerjX*wz1T8nbiTRvYhAIyyNIij8UU2i6gtZA2M0Wb9GihMIcwpu4BG6od-Ccjlld1OXiP&new=1"},{"ctime":"2018-11-18","title":"周小川国内首谈数字货币和电子支付:有三方面扭曲 有些技术只关注如何圈钱","description":"大公网","picUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/1rNDCX3Xn4E6s6jCJFjYibdIrQ6ESE8leib5ZVsSSyqViaOZ4ImaGPnrCVKH49libAibx6LsyXWGcsZ205jxNjqckEA/0?wx_fmt=jpeg","url":"https://mp.weixin.qq.com/s?src=11×tamp=1542540608&ver=1252&signature=oS4sTMvXomHQzgHGXjNZGyT6ljjuYwuyhaBkrr5deynbaymihpsyi1AGREauBNbNvHH76cbYdxvXr7zbfz2y3NxNphFXx5cDUIjj7m2VwT82wIVe4EdE9oP6F45wLulJ&new=1"},{"ctime":"2018-11-18","title":"湖北:半岁婴儿\u201c灌肠\u201d退烧 退烧不成反肾衰 面临终身透析","description":"医群网","picUrl":"http://mmbiz.qpic.cn/mmbiz_jpg/AuyMO4zftIqRF8NicTCuTicYFpbD72XyEq8UA2IGgxYDocezyoQwxfDMor8YopxeAtsoXbcILVWh6UhoZGDAZuNQ/0?wx_fmt=jpeg","url":"https://mp.weixin.qq.com/s?src=11×tamp=1542540603&ver=1252&signature=ETBgeBQQNDkh6GalturYW4UDspDW2xTh8imKCtSPk46bUs2vzDZfzFdhdNyOknc-RvtCTQa8VQ*kE8Yj0v23WVeWE26Yf-G53F*GYgoY3321H7jqg3lPpL1IVTLzArYb&new=1"}]
*/
private int code;
private String msg;
private List<NewslistBean> newslist;
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 {
/**
* ctime : 2018-11-18
* title : 普通人的汽车基础知识到底有多差?
* description : 易车
* picUrl : http://mmbiz.qpic.cn/mmbiz_jpg/tXmTSicVPQ6enLlOibt3RlJsElhn3s1HU26m15CuHDMvWKU0g4xCEadHksFVdzkdibHVRUQlibBsttpMicE64ib8LCTw/0?wx_fmt=jpeg
* url : https://mp.weixin.qq.com/s?src=11×tamp=1542540609&ver=1252&signature=eMbdrP2jsY3rO29rXPW0Mz3YTbYZIwL8JT9LjdhLdvUaZ3CSWe*NqMvBtI3P9jItt6urlZ*HbhICMVsBzZcZzBaNDj7ovAaBcoDv7bvk*BuVfBfQElBent5ZfHSnUiJk&new=1
*/
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;
}
}
}
补充 :无关紧要
package com.bw.ymy.zonghe2.Nutil;
import android.app.Application;
import android.graphics.Bitmap;
import com.bw.ymy.zonghe2.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoader.getInstance().init(new ImageLoaderConfiguration.Builder(this)
.diskCacheSize(50*1024*1024)
.memoryCacheSizePercentage(10)
.defaultDisplayImageOptions(new DisplayImageOptions.Builder()
.bitmapConfig(Bitmap.Config.RGB_565)
.cacheInMemory(true)
.cacheOnDisk(true)
.showImageOnFail(R.mipmap.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnLoading(R.mipmap.ic_launcher)
.build())
.build());
}
}