Android上webview界面切换动画效果

Wesley13
• 阅读 1083

使用Android上的webview控件时需要跳转到下一个html时,要求当前界面缓缓的向左移动,下一个html界面缓缓的从右边出现。这与常规动画不同,一般方式将无法制作出动画。主要实现方法可以先保存上一个网页的快照,与将要跳转的页面结合起来,制作相关动画。

下面是主要代码:

@Override  
        public void onProgressChanged(WebView view, int newProgress) {  
            if(newProgress==100){  
                if(iamgeView!=null)  
                iamgeView.setVisibility(View.GONE);  
                //view.setVisibility(View.VISIBLE);   
              
                //DroidGap.this.root.addView(view);   
              
                System.out.println("加载完成");  
                Animation translate_in=AnimationUtils.loadAnimation(DroidGap.this, R.drawable.translate_in);  
                  
                  
                translate_in.setFillAfter(true);  
                translate_in.setDuration(1000);  
                translate_in.setDetachWallpaper(true);  
            //  translate_in.   
                view.setAnimation(translate_in);   
                  
                  
                  
    Animation translate_out=AnimationUtils.loadAnimation(DroidGap.this, R.drawable.translate_out);  
                  
    translate_out.setAnimationListener(new AnimationListener(){  
  
        @Override  
        public void onAnimationEnd(Animation animation) {  
            if(null!=iamgeView){  
                DroidGap.this.root.removeView(iamgeView);  
                iamgeView=null;  
            }  
              
        }  
  
        @Override  
        public void onAnimationRepeat(Animation animation) {  
            // TODO Auto-generated method stub   
              
        }  
  
        @Override  
        public void onAnimationStart(Animation animation) {  
            // TODO Auto-generated method stub   
              
        }  
          
    });  
    translate_out.setFillAfter(true);  
    translate_out.setDuration(1000);  
    translate_out.setDetachWallpaper(true);  
            //  translate_in.   
    if(null!=iamgeView){  
        iamgeView.setAnimation(translate_out);   
    }             
            }else{  
                  
                if(null==iamgeView){  
                      
                    iamgeView=new ImageView(DroidGap.this);  
  
                    view.setDrawingCacheEnabled(true);  
                    Bitmap bitmap=view.getDrawingCache();  
                    if(null!=bitmap){  
                        Bitmap b=   Bitmap.createBitmap(bitmap);  
                        iamgeView.setImageBitmap(b);  
                    }  
                            DroidGap.this.root.addView(iamgeView);  
                }  
                }  
            super.onProgressChanged(view, newProgress);  
        }

<span style="color: rgb(51, 51, 51); font-family: tahoma, 宋体; font-size: 14px; line-height: 22.3999996185303px; text-align: justify; background-color: rgb(250, 250, 252);">其中的iamgeView:自己定义的ImageView控件。</span>

R.drawable.translate_in:进入的translate动画

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android" >  
     <translate android:fromXDelta="100%" android:toXDelta="0%p"    
            android:duration="100" />    
      
</set>

<span style="color: rgb(51, 51, 51); font-family: tahoma, 宋体; font-size: 14px; line-height: 22.3999996185303px; text-align: justify; background-color: rgb(250, 250, 252);">R.drawable.translate_out:出的translate动画</span>

<span style="color: rgb(51, 51, 51); font-family: tahoma, 宋体; font-size: 14px; line-height: 22.3999996185303px; text-align: justify; background-color: rgb(250, 250, 252);"></span><pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?>  
<set xmlns:android="http://schemas.android.com/apk/res/android">  
     <translate android:fromXDelta="0%" android:toXDelta="-100%p"    
            android:duration="100" />    
      
</set>

该代码详细描述:在onProgressChanged方法中,首先判定是否加载进度是否到100,

在没有执行完的情况下,先去new ImageView对象,iamgeView=new ImageView(DroidGap.this);

然后进行设置view.setDrawingCacheEnabled(true);很重要的一句话,

为了下面能够对webview界面截取图片,即 Bitmap bitmap=view.getDrawingCache();

之后将bitmap加到imageview中:imageview.setImageBitmap(bitmap);

然后添加到当前的Linearlayout布局中即DroidGap.this.root.addView(iamgeView);

如果下面的页面加载完成了,就执行进入动画,即view.setAnimation(translate_in);

同时对该Imageview执行out动画,并且在动画的监听的结束时执行

DroidGap.this.root.removeView(iamgeView);即清除掉当前生成的屏幕截图。

iamgeView=null;

最后一点要注意清除截图,否则android虚拟机可能会出现报错。

版权声明:本文为博主原创文章,未经博主允许不得转载。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
凯特林 凯特林
3年前
移动端H5开发常用技巧总结
html篇常用的meta属性设置meta对于移动端的一些特殊属性,可根据需要自行设置<meta name"screenorientation" content"portrait" //Android 禁止屏幕旋转<meta name"fullscreen" content"yes"             //全屏显示
Stella981 Stella981
3年前
Android电话系统之RIL
Android(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.linuxidc.com%2Ftopicnews.aspx%3Ftid%3D11) RILJava
Stella981 Stella981
3年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
3年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这