2011-11-21 2 views
10

누구든지이 일을 도와 주시면 매우 행복합니다. webview를 사용하는 응용 프로그램이 있습니다. webview는 URL을로드하고 웹 튜토리얼과 함께 열려는 다른 모든 링크를 무시하기 위해 Google 자습서를 사용했습니다. 나는 res/slide_right xml에있는 애니메이션 파일을 만들고 지금까지 그렇게 잘 만들었습니다. 내 주요 Java 활동에서 효과를 호출하지만 첫 번째 페이지에만 적용됩니다. 내가 원하는 것은 웹 페이지에서 링크가로드되는 모든 페이지에 적용되는 효과입니다.웹보기에서 안드로이드 전환 효과를 사용하려면 어떻게해야합니까?

내 코드로 도움이 될 수 있습니까?

package com.ihome;

import android.app.Activity; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 



public class IhomeActivity extends Activity { 
    WebView mWebView; 
    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Animation slideRightAnimation = AnimationUtils.loadAnimation(getBaseContext(), R.anim.slide_right); 
      mWebView.startAnimation(slideRightAnimation); 
      view.loadUrl(url); 
      return true; 
     } 
    } 


@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      Animation slideLeftAnimation = AnimationUtils.loadAnimation(getBaseContext(), R.anim.slide_left); 
      mWebView.startAnimation(slideLeftAnimation); 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.setVerticalScrollBarEnabled(false); 
    mWebView.setHorizontalScrollBarEnabled(false); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("http://www.google.com/"); 
    mWebView.setWebViewClient(new HelloWebViewClient()); 
+0

안녕하세요, 위의 질문을 도와 줄 수있는 사람이 있습니까? 내 코드를 업로드해야합니까? 나는 내 코드 위에 게시 – alexgeorg86

+0

, 나를 도와주세요 ... – alexgeorg86

+0

희망이 도움 http://stackoverflow.com/q/7641121/577046 – Synxmax

답변

21

이 내가 네이티브 API와 함께 할 수있는 최선이다, 타이밍이 페이지와 애니메이션의 로딩이 .. EDIT 비동기 꽤 괜찮 때문에없는 것 같다 업데이트,이 하나는 약간 더 좋다. EDIT2 : 이것은 지금까지 시도한 나의 최선의 시도이며 사용자가 페이지가로드 중임을 인식 할 수있게 해줍니다. 반 매끄러운 애니메이션을 얻는 유일한 방법은 페이지가 미리로드되는 것을 허용하는 것입니다.

package com.adeptdev.animwebview; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class HelloWebViewActivity extends Activity { 
    ProgressDialog mProgressDialog; 


    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.setVisibility(View.GONE); 
      mProgressDialog.setTitle("Loading"); 
      mProgressDialog.show(); 
      mProgressDialog.setMessage("Loading " + url); 
      return false; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      mProgressDialog.dismiss(); 
      animate(view); 
      view.setVisibility(View.VISIBLE); 
      super.onPageFinished(view, url); 
     } 
    } 

    private void animate(final WebView view) { 
     Animation anim = AnimationUtils.loadAnimation(getBaseContext(), 
       android.R.anim.slide_in_left); 
     view.startAnimation(anim); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     WebView view = (WebView) findViewById(R.id.webview); 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { 
      view.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mProgressDialog = new ProgressDialog(this); 
     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.setVerticalScrollBarEnabled(false); 
     webView.setHorizontalScrollBarEnabled(false); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.loadUrl("http://www.google.com/"); 
     webView.setWebViewClient(new HelloWebViewClient()); 
    } 
} 
+0

Tom 대단히 감사합니다! 뒤로 버튼으로도 무엇을해야하는지 말해 줄 수 있습니까? 난 반대 방향으로 애니메이션을 시작하려면 다시 버튼을 누르면 – alexgeorg86

+0

재정, 정말 내가 @Override '추가 할 \t 공공 무효 onBackPressed() { \t super.onBackPressed(); \t overridePendingTransition (android.R.anim.slide_out_right, android.R.anim.slide_out_right); \t} '하지만 작동하지 않습니다. 제안 사항이 있습니까? –

+0

사람이 다시 한 번 나를 도울 수있는 활동의 하위 클래스에서 onBackPressed – alexgeorg86

관련 문제