Android上webview界面切换动画效果

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

下面是主要代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
@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); 
         }
?
1
<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动画  

?
1
2
3
4
5
6
<? 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 >
?
1
< 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 >
?
1
2
3
4
5
6
< 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虚拟机可能会出现报错。
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值