Как я могу использовать эффекты перехода Android в веб-представлении?

Если кто-то может помочь мне с этим, я буду очень рад. У меня есть приложение, которое использует веб-просмотр. Веб-просмотр загружает 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());

person alexgeorg86    schedule 21.11.2011    source источник
comment
Здравствуйте, кто-нибудь может помочь мне с вышеуказанным вопросом? Должен ли я загрузить свой код?   -  person alexgeorg86    schedule 22.11.2011
comment
Я написал выше свой код, пожалуйста, помогите мне...   -  person alexgeorg86    schedule 24.11.2011
comment
Надеюсь, что это поможет stackoverflow.com/q/7641121/577046   -  person Synxmax    schedule 24.11.2011
comment
Synxmax видел этот вопрос, но когда я добавляю: Animation slideLeftAnimation = AnimationUtils.loadAnimation(getBaseContext(), R.anim.slide_left); mWebView.startAnimation(slideLeftAnimation); до mWebView.loadUrl эффект возникает только один раз в начале моего приложения и никогда больше. Можете ли вы увидеть мой код и объяснить мне, что вы думаете?   -  person alexgeorg86    schedule 24.11.2011
comment
Вы имеете в виду, что когда вы меняете URL-адрес, эффект не появляется?   -  person Synxmax    schedule 24.11.2011
comment
да, если я использую код, который вы предлагаете. Но с приведенным выше кодом похоже, что он работает, но если я нажимаю на одну ссылку, эффект повторяется в течение нескольких секунд, и когда я нажимаю кнопку «Назад», эффект происходит очень быстро.   -  person alexgeorg86    schedule 24.11.2011
comment
Может ли кто-нибудь помочь мне, пожалуйста, я очень новичок в разработке Java   -  person alexgeorg86    schedule 28.11.2011


Ответы (1)


Это лучшее, что я мог сделать с собственным API, кажется, время не совсем правильное, потому что загрузка страницы и анимация асинхронны. РЕДАКТИРОВАТЬ: обновлено, это немного лучше. 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());
    }
}
person Thomas Dignan    schedule 30.11.2011
comment
Том большое спасибо за это! Не подскажете, что делать еще и с кнопкой назад? - person alexgeorg86; 30.11.2011
comment
переопределить onBackPressed в вашем подклассе активности - person Thomas Dignan; 07.12.2011
comment
Может ли кто-нибудь помочь мне еще раз, я хочу, чтобы при нажатии кнопки «Назад» запускалась анимация в противоположном направлении, поэтому я добавляю '@Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition (android.R.anim.slide_out_right, android.R.anim.slide_out_right); }', но это не работает. Есть предложения? - person alexgeorg86; 20.12.2011
comment
Том, можешь еще раз помочь мне с кнопкой «Назад»? - person alexgeorg86; 24.12.2011
comment
Хорошо сделано. Это действительно то, что я хотел!! - person Ramesh_D; 17.06.2014