Как скрыть индикатор выполнения после завершения анимации - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть активность, содержащая WebView и ProgressBar. Во время загрузки веб-страницы индикатор выполнения появляется и постепенно заполняется по горизонтали. Как можно установить видимость индикатора выполнения на View.GONE после завершения анимации?

public class WebviewActivity extends AppCompatActivity {
    WebView myWebView;
    ProgressBar pBar;
    ProgressBar myProgressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_webview);
    }

    @Override
    protected void onStart() {
        super.onStart();

        setContentView(R.layout.fragment_webview);

        myProgressBar = findViewById(R.id.mProgressBar);
        myProgressBar.setMax(100);

        String url = getIntent().getStringExtra("url");
        myWebView = findViewById(R.id.webview01);
        myWebView.setWebViewClient(new WebViewClient());
        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.loadUrl(url);

        myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                myProgressBar.setProgress(newProgress);

                if (newProgress == 100) {
                    AlphaAnimation fadeOut;
                    fadeOut = new AlphaAnimation(1,0);
                    fadeOut.setDuration(500);
                    fadeOut.setFillAfter(true);
                    myProgressBar.startAnimation(fadeOut);
//                    myProgressBar.setVisibility(View.GONE);
                } else {
                    myProgressBar.setVisibility(View.VISIBLE);
                }
            }
        });

    }

    private class WebViewClient extends android.webkit.WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
            String url=request.getUrl().toString();

            view.loadUrl(url);
            return true;
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
//            myProgressBar.setVisibility(View.GONE);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2018

Попробуйте установить слушателя анимации для объекта анимации (fadeOut):

myWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                myProgressBar.setProgress(newProgress);

                if (newProgress == 100) {
                    AlphaAnimation fadeOut;
                    fadeOut = new AlphaAnimation(1, 0);
                    fadeOut.setDuration(500);
                    fadeOut.setFillAfter(true);
                    fadeOut.setAnimationListener(new Animation.AnimationListener() {
                        @Override
                        public void onAnimationStart(Animation animation) {
                            // whatever you want to happen when the fadeOut animation starts
                        }

                        @Override
                        public void onAnimationEnd(Animation animation) {
                            // whatever you want to happen when the fadeOut animation ends
                            myProgressBar.setVisibility(View.GONE);
                        }

                        @Override
                        public void onAnimationRepeat(Animation animation) {
                            // whatever you want to happen when the fadeOut animation repeats itself
                        }
                    });
                    myProgressBar.startAnimation(fadeOut);
                } else {
                    myProgressBar.setVisibility(View.VISIBLE);
                }
            }
        });

С помощью описанных выше обратных вызовов вы можете подключиться к AnimationStart, AnimationEnd и AnimationRepeat.

0 голосов
/ 01 ноября 2018

Используйте слушателя:

fadeOut.setAnimationListener(new Animation.AnimationListener() {
    @Override
    public void onAnimationStart(Animation animation) {}

    @Override
    public void onAnimationRepeat(Animation animation) {}

    @Override
    public void onAnimantionEnd(Animation animation) {
        myProgressBar.setVisibility(View.GONE);
    }
});
...