第一次启动“活动”时,fadeIn动画不适用于webview

时间:2014-05-09 06:33:34

标签: android webview android-webview android-animation fadein

我正在创建一个活动,其中信息显示在Webview中,此活动可通过菜单访问。 我喜欢照顾视觉方面,并且与Activity的交互是流动的,但是webview的信息需要一段时间才能加载,这是正常的,但我不喜欢在接口的其余部分已经结束时突然出现。对我来说,解决方案是webview的信息准备出现,慢慢显示,看起来很优雅,当我使用FadeIn动画时它就在这里。

问题是:当我第一次启动应用程序时,访问菜单,从此到我的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);
    }

}

2 个答案:

答案 0 :(得分:2)

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

现在,如果你添加

android:animateLayoutChanges="true"

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

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

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

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

如果您在应用程序的视图中使用这种方式,视图生成和销毁将感觉非常流畅,没有样板代码。

答案 1 :(得分:1)

步骤1:在WebView之后放置一个视图,使其具有您想要的任何背景颜色。

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp" >

        <WebView
            android:id="@+id/WV_PROPERTYRULES"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>

<View
    android:id="@+id/ViewFader"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF" />

注意:请确保您看到它涵盖了我们的视图。

步骤2:在您想要引起淡入淡出时调用该视图的动画。

private void FadeinmyWebView() {
    View ViewFader = findViewById(R.id.ViewFader);
    ObjectAnimator alpha_anim = ObjectAnimator.ofFloat(ViewFader, "alpha",
            1f, 0).setDuration(3000);
    alpha_anim.start();
}