之前写了一篇博文是使用Banner实现广告栏,之前的图片时固定图片很不实用,在大部分app中都是获取的后台图片展示到广告栏中,点击图片进入相应的界面,这次主要实现就是通过后台获取的json数据解析出来显示到广告栏上
结构: 效果图:
一、下载需要使用的架包和库
1、OKhttp下载:http://download.csdn.net/detail/qq_26650589/9811409
2、Picasso下载:http://download.csdn.net/detail/qq_26650589/9695886
3、Gson下载:http://download.csdn.net/detail/qq_26650589/9888267
4、Banner开源库下载:http://download.csdn.net/detail/qq_26650589/9875699
OKhttp(网络请求),Picasso(图片缓存),Gson(Gson解析)-------可以通过Android studio里内部导入架包(参考:http://blog.csdn.net/qq_26650589/article/details/73159658),Banner开源库就得需要下载导入(http://blog.csdn.net/qq_26650589/article/details/73526367)
感觉废话有点多了,导入成功后具体实现代码:
json数据:
[
{
"title": "http://cuimg.zuyushop.com/cuxiaoPic/201412/2014120020045241723.jpg",
"click": "http://www.baidu.com"
},
{
"title": "http://img3.imgtn.bdimg.com/it/u=1267574642,539292103&fm=214&gp=0.jpg",
"click": "http://www.sina.com.cn/"
},
{
"title": "http://img.mp.itc.cn/upload/20160602/55fb92d88b9a4d5a9093355cc02c6ef1_th.jpg",
"click": "http://www.csdn.net/"
}
]
1、activity_main布局代码:
2、创建实体类banner(变量名要和json数据字段相同)
package com.wdl.banner;
/**
* Created by Administrator on 2017/7/3 0003.
*/
public class banner {
public String title;
public String click;
public String getClick() {
return click;
}
public void setClick(String click) {
this.click = click;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
3、创建图片缓存类GlideImageLoader
public class GlideImageLoader extends ImageLoader{
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Picasso.with(context).load((String) path).into(imageView);
}
}
public class MainActivity extends AppCompatActivity {
private List img = new ArrayList<>();
public String date;
public String name, click;
public List l = new ArrayList<>();
public Banner banner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件id
banner = (Banner) findViewById(R.id.bannervp);
//获取json数据
okhttp();
//广告栏Banner的点击事件
banner.setOnBannerListener(new OnBannerListener() {
@Override
public void OnBannerClick(int position) {
switch (position) {
case 0:
//取出集合中第一个数据放到name1中
String name1 = l.get(0);
//将name1的值(连接)传到webview控件中进行打开
startActivity(new Intent(MainActivity.this, WebActivity.class).putExtra("url", name1));//
break;
case 1:
String name2 = l.get(1);
startActivity(new Intent(MainActivity.this, WebActivity.class).putExtra("url", name2));//
break;
case 2:
String name3 = l.get(2);
startActivity(new Intent(MainActivity.this, WebActivity.class).putExtra("url", name3));//
break;
}
}
});
}
private void okhttp() {
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient ok = new OkHttpClient();
Request request = new Request.Builder().url("http://192.168.1.129/json.json").build();
try {
Response sponse = ok.newCall(request).execute();
//得到json数据
date = sponse.body().string();
//解析方法传入date数据
JsonJX(date);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
public void JsonJX(String date) {
//判断date是否为空
if (date != null) {
//Gson解析
Gson gson = new Gson();
Type type = new TypeToken>() {
}.getType();
List list = gson.fromJson(date, type);
for (banner bbb : list) {
//获取图片
name = bbb.getTitle();
//图片的连接
click = bbb.getClick();
img.add(name);
l.add(click);
}
Message mes = new Message();
mes.what = 1;
handler.sendMessage(mes);
}
}
public Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
banner.setImageLoader(new GlideImageLoader());
banner.setIndicatorGravity(BannerConfig.RIGHT);//圆点的位置
banner.setImages(img).//加载的图片
setBannerStyle(BannerConfig.CIRCLE_INDICATOR).
setDelayTime(2000).start();//图片循环滑动的时间2秒
break;
}
}
;
};
}
5、创建weblayout布局
package com.wdl.banner;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.webkit.CookieManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
public class WebActivity extends AppCompatActivity {
private WebView webView;
private ProgressBar mProgressBar;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.weblayout);
webView = (WebView) findViewById(R.id.web);
WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("utf-8");
webView.setInitialScale(100);
webSettings.setJavaScriptEnabled(true); // 支持js
webSettings.setAllowFileAccess(true); // 设置可以访问文件
webSettings.setNeedInitialFocus(true); // 当webview调用requestFocus时为webview设置节点
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // 支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); // 支持自动加载图片
//webSettings.setUserAgentString(DESKTOP_USERAGENT);// ///UA标识模拟电脑
webSettings.setUseWideViewPort(false); // 将图片调整到适合webview的大小
webSettings.setSupportZoom(true); // 支持缩放
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 支持内容重新布局
webSettings.supportMultipleWindows(); // 多窗口
webSettings.setAppCacheMaxSize(1024 * 1024 * 8);// 设置缓冲大小
webSettings.setBuiltInZoomControls(true); // 设置支持缩放
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
}
});
Intent intent = getIntent();
if (intent != null) {
if (intent.hasExtra("url")) {
webView.loadUrl(intent.getStringExtra("url"));
}
}
}}