广告栏实现

     之前写了一篇博文是使用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" />







  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值