我正在创建一个在 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/