我已经阅读过有关此问题的几个主题,但我还有另一个奇怪的错误行为:
我创建了一个ViewPager,其初始页数为5.如果达到了页数-2,
pagerAdapter.notifyDataSetChanged();
被调用。 片段都有自己的id,从1开始计数。所以第一个片段得到第一个,第二个片段得到第二个,依此类推。 每个片段都会从网络服务器中加载图片,具体取决于他们的ID:
webView.loadUrl("http://myserver/" + id + ".jpg");
现在看来,有时图像大于设备的屏幕宽度。这就是我添加这些内容的原因:
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
前5个元素看起来非常合适,但是当试图滑动到下一个片段时,您必须先向左侧扫描3px的webview,然后再次滑动,以获得下一个片段。 我不知道为什么会这样,但是在最初的5张图片之后,它可以正常工作。也许它与以下事实有关:在开始时我告诉pageradapter有5个片段要显示,滚动后会添加更多片段。以下片段不受此问题的影响。 这是第一个问题。
第二个问题是,当刷过完全正确显示的图像时,有时图像将不适合屏幕。我必须将屏幕转为横向并返回到肖像,然后才能正确安装图像。 怎么会发生这种情况,为什么屏幕重新绘制时会起作用,但第一次尝试时却没有?它似乎有时会发生。
这是我的两个问题,第一个是前5个片段的最小wron拟合,第二个是滑动时有时不适合的图像,但是当屏幕被重绘时适合
这是我的主要活动:
public class MyActivity extends ActionBarActivity {
public static int NUM_PAGES = 5;
private ViewPager viewPager;
private CustomPagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
viewPager = (ViewPager)findViewById(R.id.activity_my_viewpager);
pagerAdapter = new CustomPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int i) {
if(NUM_PAGES - i <= 2) {
NUM_PAGES+=3;
}
pagerAdapter.notifyDataSetChanged();
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
private class CustomPagerAdapter extends FragmentStatePagerAdapter {
public CustomPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return ScreenFragment.create(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
这里是片段类:
public class ScreenFragment extends Fragment {
public static final String ARG_PAGE = "ARG_PAGE";
private int pageNumber;
public static ScreenFragment create(int pageNumber) {
ScreenFragment fragment = new ScreenFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments().getInt(ARG_PAGE)+1;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.fragment_screen, container, false);
WebView webView = (WebView)viewGroup.findViewById(R.id.fragment_screen_webview);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl("http://someserver/" + Integer.toString(number) + ".jpg");
return viewGroup;
}
}
提前致谢
答案 0 :(得分:1)
您应该尝试充气ImageView布局而不是使用WebView。 为每个页面充气ImageView时,您可以使用AsyncTask下载每个页面的图像。
见这里:https://stackoverflow.com/a/2472175/3064486
你可以让一个只包含android:scaleType="fitXY"
或"fitCenter"
的ImageView的布局然后在你的适配器内的onCreateView中,你可以使用findViewById
来扩充这个布局并找到它内部的ImageView 。然后你可以使用img.setImageBitmap
就像这个答案所暗示的那样。
答案 1 :(得分:0)
也许这会对你有帮助,
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
);