webview模拟原生页面切换效果

WebViewDemo webview模拟原生页面切换效果 前言 在开发中,有时候我们会在app中使用WebView加载一个web页面,这样可以适当减轻我们开发的难度

本文包含相关资料包-----> 点击直达获取<-------

WebViewDemo

webview模拟原生页面切换效果

前言

在开发中,有时候我们会在app中使用WebView加载一个web页面。这样可以适当减轻我们开发的难度。但是弊端是WebView中切换html,没有像原生页面的切换效果。这里我们就利用动画,以及 获取网页的快照来实现android activity 默认的切换效果(页面从右往左进入,从左往右退出)。

先看看效果:

大体思路

监听webview加载url的进度,在没到100%之前先获取当前页面的截图,并用imageview显示在手机屏幕上。网页加载好的时候。让imageview和webView分别加载对应的动画效果,以达到从右到左或者从左到右的效果,模拟原生页面的切换效果。

第一步、创建相关动画资源

在animal文件夹下新建以下补间动画: 1、页面进入相关动画 translate_in_go.xml ```java

```

translate_out_go.xml ```java

```

2、页面退出相关动画 translate_in_back.xml ```java

```

translate_out_back.xml ```java

```

第二步、在webView中调用动画达到效果

```java package com.teprinciple.webviewdemo;

import android.graphics.Bitmap; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ImageView; import android.widget.RelativeLayout;

public class MainActivity extends AppCompatActivity {

private WebView mWebView;
private RelativeLayout root;
private boolean isGoBack = false;
private boolean isFirst = true;
private ImageView iamgeView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mWebView = (WebView) findViewById(R.id.webView);
    root = (RelativeLayout) findViewById(R.id.root);
    initoperation();
}

private void initoperation() {
    initWebView();
    mWebView.loadUrl("http://www.jianshu.com/u/7c36ad462572");
}

private void initWebView() {


    mWebView.setWebChromeClient(new WebChromeClient() {

        //url加载进度改变的监听
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            if (isFirst)return; //刚进入页面不需要模拟效果,app自己有

            view.setVisibility(View.GONE);//先隐藏webview

            if (newProgress == 100) {

                //加载完毕,显示webview 隐藏imageview
                view.setVisibility(View.VISIBLE);
                if (iamgeView != null)iamgeView.setVisibility(View.GONE);

                //页面进入效果的动画
                Animation translate_in = AnimationUtils.loadAnimation(
                    MainActivity.this, R.anim.translate_in_go);

                Animation translate_out = AnimationUtils.loadAnimation(
                    MainActivity.this, R.anim.translate_out_go);

                //页面退出的动画
                if (isGoBack){
                    translate_in = AnimationUtils.loadAnimation(
                        MainActivity.this, R.anim.translate_in_back);

                    translate_out = AnimationUtils.loadAnimation(
                        MainActivity.this, R.anim.translate_out_back);
                }
                translate_in.setFillAfter(true);
                translate_in.setDetachWallpaper(true);
                translate_out.setFillAfter(true);
                translate_out.setDetachWallpaper(true);

                //开启动画
                if(null!=iamgeView)iamgeView.startAnimation(translate_out);
                view.startAnimation(translate_in);

                //动画结束后,移除imageView
                translate_out.setAnimationListener(new Animation.AnimationListener(){
                    @Override
                    public void onAnimationEnd(Animation animation) {
                        if(null!=iamgeView){
                            root.removeView(iamgeView);
                            iamgeView=null;
                            isGoBack = false;
                        }
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {
                        // TODO Auto-generated method stub
                    }

                    @Override
                    public void onAnimationStart(Animation animation) {
                        // TODO Auto-generated method stub
                    }
                });

            }else{
                //url没加载好之前,隐藏webview,在主布局中,加入imageview显示当前页面快照

                if(null==iamgeView){
                    iamgeView=new ImageView(MainActivity.this);
                    view.setDrawingCacheEnabled(true);
                    Bitmap bitmap=view.getDrawingCache();
                    if(null!=bitmap){
                        Bitmap b=   Bitmap.createBitmap(bitmap);
                        iamgeView.setImageBitmap(b);
                    }
                    root.addView(iamgeView);
                }
            }

        }
    });


    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            isFirst = false;
            return super.shouldOverrideUrlLoading(view, url);
        }
    });


    //webView的相关设置
    WebSettings websettings = mWebView.getSettings();
    websettings.setJavaScriptEnabled(true); // Warning! You can have XSS
    websettings.setSupportZoom(true);
    websettings.setBlockNetworkImage(true);  //使把图片加载放在最后来加载渲染
    websettings.setAppCacheEnabled(true);    //开启H5(APPCache)缓存功能
    websettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    websettings.setAllowFileAccess(true);    // 可以读取文件缓存(manifest生效)
    websettings.setDatabaseEnabled(true);    //webSettings.setDatabaseEnabled(true);
    websettings.setDomStorageEnabled(true);  // 开启 DOM storage 功能
    websettings.setDisplayZoomControls(false);
    websettings.setDefaultTextEncodingName("utf-8");
    websettings.setRenderPriority(WebSettings.RenderPriority.HIGH); //提高渲染的优先级
}

@Override
public void onBackPressed() {
    if (mWebView.canGoBack()) {
        isGoBack = true;
        mWebView.goBack();
    } else {
        super.onBackPressed();
    }
}

}

```

activity的布局文件: ```java

```

这样就模仿出了app原生的切换效果。但是当url页面的很丰富,加载时间会很长,这样来实现就会有的卡顿的效果,不过一般的页面效果还是很好的。

文章地址

http://www.jianshu.com/p/b7f44ba49270

参考文献

  • 基于Ajax的RSS阅读系统的研究与实现(北京邮电大学·张洪涛)
  • 基于前端模块化开发思想的社区型知识型网站的设计与实现(北京交通大学·李敏)
  • 基于Bootstrap+SSI的跨平台企业管理系统的设计与实现(东华大学·季嘉明)
  • 基于Microsoft.NET平台的网站统一布局管理器(哈尔滨工程大学·曾建明)
  • 基于SSH框架和ExtJs框架的资质管理系统的设计与实现(云南大学·职辉)
  • 基于J2EE和MVC的Web应用的研究(沈阳工业大学·朱云娜)
  • 手机虚拟形象系统的设计与开发(大连理工大学·翟佳)
  • 基于AJAX的信息聚合系统的研究与实现(武汉理工大学·蒋佳)
  • 基于Microsoft.NET平台的网站统一布局管理器(哈尔滨工程大学·曾建明)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于HTML5的多媒体资源交互SNS平台的实现(曲阜师范大学·陈丹)
  • 基于SSH框架和ExtJs框架的资质管理系统的设计与实现(云南大学·职辉)
  • 基于Vue.js的可编程视频平台的设计和实现(华中科技大学·施璇)
  • 基于J2EE的Web应用程序在仪表在线网站中的应用(浙江大学·周明)
  • 基于HTML5的SNS教学信息平台的设计与实现(中山大学·张纯涛)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码项目助手 ,原文地址:https://m.bishedaima.com/yuanma/35950.html

相关推荐

  • 基于SpringBoot框架的IT技术交流分享平台

    这是一份采用Java语言构建的🔥🔥SpringBoot核心框架的IT技术讨论平台源代码项目🔥🔥,我们利用SpringBoot和Vue,js技术栈进行开发,并在Idea或Eclipse环境下进行操作
    2024年05月23日
    3 1 1
  • 中药实验管理系统

    这是一个🔥🔥基于SpringBoot框架的中药实验管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    2 1 1
  • 基于Java+SSM的失物招领平台

    这是一个🔥🔥基于SSM的失物招领平台🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 失物招领平台开发技术栈为SSM项目,可以作为毕业设计课程设计作业基于Java+SSM框架实现一个失物招领平台
    2024年05月23日
    7 1 3
  • 基于JSP实现的学生成绩管理系统

    基于JSP实现的学生成绩管理系统 1 引言 1,1 任务简介 多用户管理:用户分管理员,学生 网页界面设计:利用HTML和CSS实现客户端前台设计 类间关系的设计
    2024年05月14日
    6 1 1
  • 基于python实现的比价网站

    1,项目简介 1,1你低我低 是什么? (Introduction) 你低我低 致力于建设绝无人工干预的比价网站 现支持淘宝,亚马逊 支持自定义排序方式 1
    2024年05月14日
    2 1 1
  • 基于SSM框架的考勤签到请假系统

    基于SSM框架的考勤签到请假系统是一种基于web的员工管理系统,旨在解决传统考勤管理方式中存在的效率低下等问题,随着信息技术的发展,企业管理逐渐向数字化,网络化方向转变
    2024年05月07日
    16 1 4
  • 新闻稿件管理系统

    这是一个🔥🔥基于SpringBoot框架的新闻稿件管理系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    3 1 1
  • 基于SpringBoot框架的个人博客系统

    这是一套采用Java语言构建的🔥🔥SpringBoot为核心的个人博客系统源代码🔥🔥,项目中应用了SpringBoot框架和Vue技术,开发工具为Idea或Eclipse
    2024年05月23日
    15 1 2
  • 中医藏象辨证量化诊断系统之Python

    中医藏象辨证量化诊断系统 1,内容 对深度学习,集成学习等算法进行深入研究,探索利用相关算法开展中医辨证的创新研究与应用,利用相关算法实现临床数据采集,量化诊断和可视化结果展示
    2024年05月14日
    48 1 10
  • 基于springboot+vue框架实现的在线教育系统

    基于springboot+vue框架实现的在线教育系统 一,引言 1,编写目的 希望给广大程序员们提供一个分享交流的平台,主要提供视频与文档的上传共享功能
    2024年05月14日
    16 1 3

发表回复

登录后才能评论