写这篇的时候正赶上快中午了,老娘让我去吃别人家喜酒,同时把我这个单身狗推荐出去…

对于这事 —->我很烦!!!

回归正题。

android 导航界面 最多的就是ViewPager和Fragmen实现,好处也很多,趣味性也足,欢迎界面就很单调了,除了自己公司的logo外,有些公司灵活的加入了一些广告和动态的变化。
比如说《酷我听书》

这该如何实现呢,因为APP没有办法在不更新的前提下,预先放置这些图片,所以这必然是需要和后台交互的,所以这些东西的动态获取才是最关键的,
我的想法就是根据网络的状况来加载不同的图片,如果有网络,那么随机加载网络上某一张图片,如果网络异常,那么就加载LOGO图片,两不误,岂不快哉。
于是我想到了webview,但是如果用Android自带的webview,不但容易出现内存泄露,而且加载的网页还容易出适配问题。所以我封装了一个通用BaseVebView,可根据html或者图片 自适应大小。好了。废话少数,吹比结束。


/*** 作者:朱亮 on 2017/1/20 19:54* 邮箱:171422696@qq.com* ${通用BaseVebView,html初始自适应大小,可根据情况设置放大缩小}(这里用一句话描述这个方法的作用)*/public class BaseWebView extends RelativeLayout {private Context mContext;private WebView webView;private ProgressBar progressBar;//加载进度public BaseWebView(Context context) {super(context);this.mContext = context;initView();}public BaseWebView(Context context, AttributeSet attrs) {super(context, attrs);this.mContext = context;initView();}public BaseWebView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);this.mContext = context;initView();}private void initView() {View view = LayoutInflater.from(mContext).inflate(R.layout.view_webview, this);webView = (WebView) view.findViewById(R.id.view_webView);progressBar = (ProgressBar) view.findViewById(R.id.view_webview_progress);initWebViewSet();}/*** 初始化WebView设置(里面是适配的关键配置)*/@SuppressLint("SetJavaScriptEnabled")private void initWebViewSet() {// 设置编码webView.getSettings().setDefaultTextEncodingName("utf-8");// User settingswebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);webView.getSettings().setUseWideViewPort(true);//关键点webView.getSettings().setDisplayZoomControls(false);webView.getSettings().setJavaScriptEnabled(true); // 设置支持javascript脚本webView.getSettings().setAllowFileAccess(true); // 允许访问文件webView.getSettings().setBuiltInZoomControls(true); // 设置显示缩放按钮webView.getSettings().setLoadWithOverviewMode(true);DisplayMetrics metrics = new DisplayMetrics();int mDensity = metrics.densityDpi;if (mDensity == 240) {webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);} else if (mDensity == 160) {webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);} else if(mDensity == 120) {webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.CLOSE);}else if(mDensity == DisplayMetrics.DENSITY_XHIGH){webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);}else if (mDensity == DisplayMetrics.DENSITY_TV){webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);}else{webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);}/*** 用WebView显示图片,可使用这个参数 设置网页布局类型: 1、LayoutAlgorithm.NARROW_COLUMNS :* 适应内容大小 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放*/webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);// 重新WebView加载URL的方法webView.setWebViewClient(new WebViewClient() {@Overridepublic boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {Toast.makeText(mContext, "网络错误", Toast.LENGTH_LONG).show();}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);progressBar.setVisibility(View.VISIBLE);}@Overridepublic void onPageFinished(WebView view, String url) {progressBar.setVisibility(View.GONE);super.onPageFinished(view, url);}});webView.setWebChromeClient(new WebChromeClient(){public void onProgressChanged(WebView view, int newProgress) {progressBar.setProgress(newProgress);}});}/*** 获取WebView实例* @return*/public WebView getWebView(){return webView;}/***   这个自定义web是否支持缩放(暂时测试只有图片可以缩放,网页自适应)*/public void setZoom(boolean flag){webView.getSettings().setSupportZoom(flag);}//web 清空,避免内存泄露public  void webDestory(){if (webView != null) {Log.e("LOGSe","web 清空,避免内存泄露");webView.removeAllViews();webView.destroy();webView = null;}}
}

如何使用,和自定义View使用方法一样

<com.org.zl.welcomedemo.base.BaseWebViewandroid:id="@+id/webView"android:layout_width="match_parent"android:layout_height="match_parent"></com.org.zl.welcomedemo.base.BaseWebView>

之后编写欢迎界面

/*** 作者:朱亮 on 2017/1/20 19:31* 邮箱:171422696@qq.com* ${导航界面}(这里用一句话描述这个方法的作用)*/public class DaoHangActivity extends BaseActivity {private String url = "";private BaseWebView webView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dh_activity);webView = (BaseWebView) findViewById(R.id.webView);}@Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowFocusChanged(hasFocus);
//        setUrl(url4);//设置网页方法if(!hasFocus){//如果界面还灭加载完毕return;}//获取网络是否连接if(NetUtil.CheckNetworkState(mContext)){//如果有网络java.util.Random random=new java.util.Random();// 定义随机类int result=random.nextInt(3);// 返回[0,3)集合中的整数,注意不包括3switch (result){case 0:url = "http://pic1.win4000.com/pic/e/08/f8b91258152.jpg";break;case 1:url = "http://pic1.win4000.com/pic/f/f1/3ca81257793.jpg";break;case 2:url = "http://pic1.win4000.com/pic/d/9c/daae1254766.jpg";break;}setImg(url);//设置图片方法}else{//加载本地LOGO图片url = "file:///android_asset/bg_guide.png";setUrl(url);}}private void setUrl(String url) {webView.getWebView().loadUrl(url);//设置加载网页}private void setImg(String url) {Log.e("LOGSe","加载的地址是 :"+url);int num = ScreenUtils.getScreenWidth(mContext);//获取屏幕宽度Log.e("---------------------","  num = "+num);String body="<img  src=\"" + url + "\" width = "+num+"/>";//根据屏幕宽度动态设置图片大小自适应String html="<html><body>"+body+"</html></body>";webView.getWebView().loadDataWithBaseURL(null, html, "text/html","UTF-8", null);webView.setZoom(false);//设置web不支持缩放(自适应)}@Overrideprotected void onDestroy() {super.onDestroy();try {webView.webDestory();} catch (Exception e) {e.printStackTrace();}}}

这里可根据网络状态获取不同的图片
最后onDestory清空web避免内存泄露.

请看实现后的效果图(无网络时

有网络时

在view_webView里是有一个progress布局的,在顶部加载进度,可选择性关闭即可。

private void initView() {View view = LayoutInflater.from(mContext).inflate(R.layout.view_webview, this);webView = (WebView) view.findViewById(R.id.view_webView);progressBar = (ProgressBar) view.findViewById(R.id.view_webview_progress);initWebViewSet();}

倒计时跳转就不写了,可以用Timer或者CountDownTimer来实现。完毕。

下载地址

android 使用webView加载欢迎界面的个人实现思路,实现欢迎界面不断在改变相关推荐

  1. Android中WebView加载sdcard中的html时提示:ERR_FILE_NOT_FOUND和ERR_ACCESS_DENIED

    场景 Android中WebView加载sdcard中的html显示: Android中WebView加载sdcard中的html显示_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在实 ...

  2. Android中WebView加载本地Html,与JavaScript与Android方法相互传值(续)...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/51809558 接着上篇Android中Web ...

  3. Android使用WebView加载网页

    在AndroidManifest.xml设置访问网络权限: <span style="font-size:24px;"><span style="fon ...

  4. Android Studio Webview加载assets本地文件

    1.新建assets资源文件 右键单击main目录,选择New>Folder>Assets Folder. 勾选Change Folder Location可改变其默认路径 在Assets ...

  5. Android使用WebView加载网页及数据

    今天主要介绍一下Android的一个原生组件-WebView. 在Api中关于这个类的介绍大致就是这是一个可以显示网页的视图,如: webView.loadUrl("http://www.b ...

  6. Android中WebView加载sdcard中的html显示

    场景 Android中使用WebView加载本地html并支持运行JS代码和支持缩放: Android中使用WebView加载本地html并支持运行JS代码和支持缩放_BADAO_LIUMANG_QI ...

  7. Android中WebView加载本地Html,与JavaScript与Android方法相互传值...

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010046908/article/details/51759125 最近在做项目中,要使用High ...

  8. android使用webview加载flash文件

    android 字段webview几乎实现了浏览器的全部功能,最近在使用webview加载不固定格式的文章,文章中有一部分嵌入了flash,下面就是webview可以进行视频需要进行的设置,代码如下: ...

  9. android 拦截webview加载url_WebView拦截url

    前言 在 Android开发过程中,我们偶尔会涉及到WebView的url 拦截问题.那么今天就让我们来详细讲讲WebView的拦截与返回. 今天涉及的内容: WebView 加载原理 拦截之shou ...

最新文章

  1. Vue 中 CSS 动画原理
  2. js:深入prototype(下:原型重写)
  3. vivado中的rtl中电路图无发生成_Vivado 综合崩溃调试指南
  4. TQ210——常见问题
  5. 哥德巴赫猜想(信息学奥赛一本通-T1157)
  6. Visual Studio 2015年预览设置: 辅助安装程序说明
  7. 简明 MongoDB 入门教程 1
  8. layui表格边框_layui怎么固定表格的表头
  9. linux shell 遍历指定目录下的所有文件夹
  10. 谷歌电子市场第4天总结
  11. Fw cs6破解版下载 准备学前端的同学们应该会用到的神器
  12. 【C语言】输出一个菱形
  13. Node+Mysql增删改查obj-to-sql,多条件查询
  14. found 1 high severity vulnerability in 1481 scanned packages run `npm audit fix` to fix 1 of them.
  15. jQuery中的Sizzle引擎分析
  16. 手机剪辑视频指南:去水印、加字幕、做转场,统统一键就搞定
  17. 使用recycleview 实现viewpager 功能,并带有指示器。(仿高德交通路线规划实现)
  18. 如何同时登陆多个微信账号
  19. 做题两大解题思想 by zyz on 2021/4/11
  20. 和韩雪冬学到的网页设计点滴

热门文章

  1. 中标麒麟卸载自带java_国产操作系统-中标麒麟
  2. 安卓之父鲁宾:被乔布斯羡慕嫉妒的天才
  3. Vulnhub靶机实战-POTATO-WP
  4. 从零实现并扩展可自由绘制的画板
  5. 学习Go语言要经历的的五个阶段
  6. 每个软件开发人员都应该学习的5种编程语言
  7. 大梳理!深度学习优化算法:从 SGD 到 AdamW 原理和代码解读
  8. 数据挖掘方法论及实施步骤
  9. 求n的阶乘的算法框图_干货丨Python 递归算法指归-百知教育
  10. 使用 Flutter 构建新闻应用