ViewPager android中ImageView下方的不需要的空白区域

时间:2016-07-15 14:08:13

标签: android android-studio android-fragments android-viewpager android-pageradapter

我正在使用ViewPager作为图片滑块。我正在使用 Android Studio 。一切正常,我可以在图像之间滑动。然而,在我的图像下面,由于某种原因我有白色空间。我知道你不能在ViewPager上调用wrap_content而我已经尝试将包含图像滑块的片段放入一个Activity中,而另一个片段位于图像滑块片段下方,但它们之间仍然是一些奇怪的白色空间白色空间我也可以滑动到另一个图像,这当然会导致以后出现问题:

fragment_home.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="HomeFragment">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

<fragment
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="ImageSliderFragment"
    android:id="@+id/fragment1"
    tools:layout="@layout/fragment_image_slider"
    android:layout_weight="2"/>

    <fragment
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="BottomFragment"
        tools:layout="@layout/fragment_bottom"
        android:id="@+id/fragment2"
        android:layout_weight="2"/>

</LinearLayout>

</FrameLayout>

swipe_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
    android:id="@+id/image_view_of_slider"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:adjustViewBounds="true"
    android:scaleType="fitXY"/>
<!-- adjustviewBounds prevents non-defined padding -->
<TextView
    android:id="@+id/text_view_of_swipe_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"/>

</RelativeLayout>

fragment_image_slider.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="ImageSliderFragment"
android:id="@+id/image_slide_id">

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager_of_image_slider"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
<!--height="wrap_content/match_parent" both have the same result -->

</FrameLayout>

CustomSliderAdapter.java:

public class CustomSliderAdapter extends PagerAdapter {

private int[] image_res = {R.drawable.a,R.drawable.b,
        R.drawable.c, R.drawable.d};
private String[] image_names = {"a", "b", "c", "d"};
private Context ctx;
private LayoutInflater layoutInflater;

public CustomSliderAdapter(Context ctx) {
    this.ctx = ctx;
}

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

@Override
public int getItemPosition(Object object) {
    return super.getItemPosition(object);
}

@Override
public boolean isViewFromObject(View view, Object object) {
    return (view == (RelativeLayout) object);
}

@Override
public Object instantiateItem(final ViewGroup container, final int position) {
    layoutInflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.swipe_layout, container, false);
    ImageView imageView = (ImageView) view.findViewById(R.id.image_view_of_slider);
    TextView textView = (TextView) view.findViewById(R.id.text_view_of_swipe_layout);
    imageView.setImageResource(image_res[position]);
    textView.setText(image_names[position]);
    container.addView(view);

    return view;
}

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

ImageSliderFragment.class:

public class ImageSliderFragment extends Fragment {
ViewPager viewPager;
CustomSliderAdapter adapter;
View myView;
public static int imageHeight;


public ImageSliderFragment() {}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    if(myView==null) {
        myView = inflater.inflate(R.layout.fragment_image_slider, container, false);
        viewPager = (ViewPager) myView.findViewById(R.id.view_pager_of_image_slider);
        adapter = new CustomSliderAdapter(getActivity());

        //With this I could set height of ViewPager manually
        ViewGroup.LayoutParams params = viewPager.getLayoutParams();
        params.height = imageHeight;
        viewPager.setLayoutParams(params);
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        viewPager.setAdapter(adapter);
    } else {
        ((ViewGroup) myView.getParent()).removeView(myView);
    }

    return myView;
}

}

How activity looks

我也尝试用数字(f.e.200dp)来改变我的xml文件的高度,这是有效的,但是有很多不同的设备屏幕,在某些时候它会在某些时候搞砸了

所以再次我的问题是:让ViewPager适合Imageview ,因为我也可以在白色空间中在图像之间滑动。 非常感谢帮助!

1 个答案:

答案 0 :(得分:1)

您可以在imageview上尝试使用此方法查看Viewpager图片...。

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:scaleType="fitXY" />