大家有沒有遇到過這種需求,使用Android上的webview控件時需要跳轉到下一個html時,要求當前界面緩緩的向左移動,下一個html界面緩緩的從右邊出現。
這是當時在公司做基於phonegap的項目時用到的,在extends WebChromeClient的類中實現的方法裡加上如下代碼:
- @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);
- }
iamgeView:自己定義的ImageView控件。
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>
R.drawable.translate_out:出的translate動畫,
- <?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();
然後添加到當前的Linearlayout布局中即DroidGap.this.root.addView(iamgeView);
如果下面的頁面加載完成了,就執行進入動畫,即view.setAnimation(translate_in);
同時對該Imageview執行out動畫,並且在動畫的監聽的結束時執行
DroidGap.this.root.removeView(iamgeView);即清除掉當前生成的屏幕截圖。
iamgeView=null;
第一次寫,因為是一個小功能模塊,這裡大家可以放到自己的項目裡試一下,主要代碼就這麼多,OK的,有問題的話再交流。