广告栏实现

来源:互联网 发布: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" />