android - 首次启动 Activity 时,淡入动画不适用于 webview

标签 android webview android-webview android-animation fadein

我正在创建一个在 Webview 中显示信息的 Activity,这个 Activity 是通过菜单访问的。 我喜欢处理视觉方面,与 Activity 的交互是流畅的,但是 webview 的信息需要一段时间才能加载,这是正常的,但我不喜欢在界面的其余部分已经结束时突然出现.我的解决方案是当webview的信息准备好出现的时候,慢慢显示,看起来很优雅,我用FadeIn动画的时候就是这里。

问题是:当我第一次启动应用程序时,访问菜单,然后从这里转到我的 Activity,动画没有启动,或者看起来不正常。如果我再次返回菜单并访问我的 Activity,一切正常,看起来不错。就像保留缓存之类的。

这是我的代码:

public class RazonamientoVerbal extends Fragment {

private PagerSlidingTabStrip tabs;
private ViewPager pager;
private ContactPagerAdapter adapter;
View v;


public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    v = inflater.inflate(R.layout.rv_menu_layout, container, false);

    ImageView iv_flechaderecha = (ImageView) v.findViewById(R.id.iv_flechaderecha);
    iv_flechaderecha.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ViewPager vp=(ViewPager) getActivity().findViewById(R.id.pager);
            vp.setCurrentItem(1);
        }
    });

    tabs = (PagerSlidingTabStrip) v.findViewById(R.id.tabs);
    pager = (ViewPager) v.findViewById(R.id.pager);
    adapter = new ContactPagerAdapter();

    pager.setAdapter(adapter);

    tabs.setViewPager(pager);

    return v;
}

private void iniciarLayout(final WebView wv) {
final Animation fadeIn = AnimationUtils.loadAnimation(this.getActivity(), R.anim.fadein);
            wv.setVisibility(View.VISIBLE);
            wv.startAnimation(fadeIn);
}




public class ContactPagerAdapter extends PagerAdapter implements PagerSlidingTabStrip.IconTabProvider {

    private final int[] ICONS = {R.drawable.ic_launcher_gplus, R.drawable.ic_launcher_gmail,
            R.drawable.ic_launcher_gmaps, R.drawable.ic_launcher_chrome, R.drawable.ic_launcher_gplus, R.drawable.ic_launcher_gmail,
            R.drawable.ic_launcher_gmaps, R.drawable.ic_launcher_chrome, R.drawable.ic_launcher_gplus, R.drawable.ic_launcher_gmail,
            R.drawable.ic_launcher_gmaps, R.drawable.ic_launcher_chrome, R.drawable.ic_launcher_gplus, R.drawable.ic_launcher_gmail,
            R.drawable.ic_launcher_gmaps, R.drawable.ic_launcher_chrome};

    public ContactPagerAdapter() {
        super();
    }

    @Override
    public int getCount() {
        return ICONS.length;
    }

    @Override
    public int getPageIconResId(int position) {
        return ICONS[position];
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // looks a little bit messy here
        final int padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, getResources()
                .getDisplayMetrics());
        final WebView wv = new WebView(getActivity());
        wv.setVisibility(View.INVISIBLE);
        wv.setPadding(padding, padding, padding, padding);
        if (position == 0){
            wv.loadUrl("file:///android_asset/ic_conjuntos.html");
        }else if (position != 0){
            wv.loadUrl("file:///android_asset/lectura_5_preguntas_2.html");}
        wv.setScrollBarStyle(View.GONE);
        wv.setBackgroundColor(0x00000000);
        wv.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(wv, url);
                RazonamientoVerbal rv = new RazonamientoVerbal();
                wv.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        iniciarLayout(wv);
                    }
                },1000);
            }
        });
        container.addView(wv, 0);
        return wv;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object view) {
        container.removeView((View) view);
    }

    @Override
    public boolean isViewFromObject(View v, Object o) {
        return v == ((View) o);
    }

}

最佳答案

在您的 xml 中,找到您的 webview 所在的位置,以及它的父 View 是什么。例如,假设 webview 将以编程方式添加到 LinearLayout 中。

现在,如果你添加

android:animateLayoutChanges="true"

到 xml 中的 LinearLayout,webview 将在屏幕中添加淡入淡出动画。

这适用于以编程方式添加 View ,如果您只是通过

设置 webview 的可见性,它应该可以正常工作
myWebView.setVisibility(View.VISIBLE);
or
myWebView.setVisibility(View.INVISIBLE);

这样,如果淡入淡出动画对您来说足够了,您就无需考虑在代码中添加动画。当您添加/删除 View 时,Android 会自动为您处理。

如果您在应用程序的 View 中使用这种方式, View 的生成和销毁会感觉非常顺畅,无需样板代码。

关于android - 首次启动 Activity 时,淡入动画不适用于 webview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23558036/

相关文章:

android - Android 2.2 HTTP progressive streaming = HTTP Live Streaming?

Android LiveWallpaper 选择器崩溃

Android 自动安装 APK

android-webview - 在 NativeScript 应用程序中加载本地 HTML/JavaScript/CSS

android - 存储 WebView 以供离线浏览

android - java.lang.RuntimeException : Unknown animation name: x

android - 为什么我的数据类给出空值,除非我对其应用默认值?

Android webview apply 启动太慢。

Android Webview 禁用所有链接但启用滚动

android - 如何将 Json 数据加载到 Android 中的 WebView?