广告栏实现
来源:互联网 发布:cyberduck mac 破解版 编辑:程序博客网 时间:2024/04/28 23:28
之前写了一篇博文是使用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布局代码:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.wdl.banner.MainActivity"> <com.youth.banner.Banner android:id="@+id/bannervp" android:layout_width="match_parent" android:layout_height="200dp" /></RelativeLayout>
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); } }
4、Mainactivity.java
public class MainActivity extends AppCompatActivity { private List<String> img = new ArrayList<>(); public String date; public String name, click; public List<String> 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<List<banner>>() { }.getType(); List<banner> 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布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"><WebView android:id="@+id/web" android:layout_width="match_parent" android:layout_height="match_parent"></WebView></LinearLayout>
6、创建WebActivity(工具类),创建WebActivity别忘了在清单文件中注册Activity
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")); } }}}
7、添加权限
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- 广告栏实现
- 用ViewPager实现广告栏
- Android:用ViewPager实现广告栏
- 循环广告栏的实现一
- Android开源Banner实现广告栏
- scrollView分页和pageControl,广告栏实现
- 安卓如何实现动态广告栏
- ViewPager实现轮播广告栏(BannerPager)
- React Native之广告栏Banner实现
- 一步一步实现一款实用的Android广告栏
- 使用HorizontalScrollView实现横向滑动广告栏
- 通过TextSwitcher实现广告栏内容动画切换
- 安卓学习(广告栏的实现)
- IOS中实现类似淘宝广告栏图片无限循环
- 自定义ViewFlipper实现带索引效果的自动播放广告栏
- android viewpager广告栏左右预览上下一张图片实现
- 关于APP中,广告栏实现目视循环播放的效果
- 利用viewPager实现的自动滑动的广告栏
- 不想从你全世界路过@木棉
- 玲珑杯 A 枚举 思维 数学
- iOS中通知中心NSNotificationCenter应用总结
- C# 值类型和引用类型
- 设计模式(三):观察者模式与发布/订阅模式区别
- 广告栏实现
- (3) spring注入Properties,List,Set,Map
- 事务视图索引
- url之后拼接时间戳的好处是避免缓存
- 【LintCode】最长上升序列(Longest Increasing Sequence)
- 并发 并行 同步 异步 多线程的区别
- 关于冒泡排序
- Redux基本原理和使用
- 函数指针及函数指针数组的妙用