Android - ViewPager 中的 ImageView 问题

3

我在view pager中有一个image view,用于显示一些来自url的图片,如下图所示:

enter image description here 然而,在我的情况下,图片应该填充(占用整个view pager空间)。但是,实际上发生的是即使我将布局参数设置为fill parent,图片也会在中心显示。

以下是我返回带有image view的布局的片段:

ImageView image = new ImageView(getActivity());

        ImageLoader imgLoader = new ImageLoader(MainActivity.context);
        imgLoader.DisplayImage(imagePath, new Activity(), image);

        LinearLayout layout = new LinearLayout(getActivity());
        layout.setLayoutParams(new LayoutParams());

        layout.setGravity(Gravity.CENTER);
        layout.addView(image);

        return layout;

视图翻页器:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="225dp"
            android:background="@color/white"
            android:orientation="vertical" >

            <android.support.v4.view.ViewPager
                android:id="@+id/pager"
                android:layout_width="fill_parent"
                android:layout_height="0dp"
                android:layout_weight="1" />
        </LinearLayout>

当图片从URL加载时,我将显示一些进度动画,一旦加载完成,我将把图片设置到ImageView中。
if (bitmap != null) {
                imageView.setBackgroundResource(0);
                imageView.setImageBitmap(bitmap);

            } else {
                imageView.setBackgroundResource(R.drawable.view_pager_progress);
                final AnimationDrawable startAnimation = (AnimationDrawable) imageView
                        .getBackground();
                imageView.setScaleType(ScaleType.CENTER);// i tried FIT_XY, dint work
                startAnimation.start();
            }

总结一下,我想要的是,视图页内的图像应该在水平和垂直方向上填满整个视图页。有什么办法可以实现这个目标吗?

亲爱的,你怎么解决这个问题?我也遇到了同样的问题,但是使用了CoordinatorLayout和Content... - Mateus
4个回答

6

请将imageView的ScaleType设置为CENTER_CROP。

imageView.setScaleType(CENTER_CROP)

也许在将ImageView添加到LinearLayout时,您需要添加一些布局参数。

CENTER_CROP 没有起作用,我甚至尝试为 ImageView 设置布局参数。但是到目前为止还没有运气。 - suresh cheemalamudi
很抱歉听到这个。您需要在ViewPager中为LinearLayout和ImageView使用match_parent布局参数。最简单的方法是使用XML布局资源。然后可以使用CENTER_CROP来实现。 - Eugene Popovich

1
@suresh cheemalamudi在你的代码中,你给你的线性布局设置了一个高度,而你的pager就在这个布局里。相反,将其设置为match parent。XML代码应该如下所示:
   <android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/view_pager"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

而且,在你的Java代码中指定这种方式

  imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);

0

尝试使用:

image.setAdjustViewBounds(true);

有任何变化吗?如果没有,请确保包含imageView的父视图或相邻视图的填充或边距不会干扰您尝试实现的布局。您还可以尝试手动添加一个imageView,并查看它在编辑器中的外观。 - NoToast
这是上述活动的完整XML代码。您认为这里有任何问题吗?http://pastebin.com/7AAMWuvP - suresh cheemalamudi
请注意,这只发生在三星Galaxy S4上,其他设备都可以正常工作。 - suresh cheemalamudi

0

好的。实际有效的解决方案是:

        ImageView imageView = new ImageView(context);
        imageView.setLayoutParams(new ViewGroup.LayoutParams(mScreenWidth, ViewGroup.LayoutParams.WRAP_CONTENT));
        imageView.setAdjustViewBounds(true);
        imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);

        Drawable drawable = Drawable.createFromPath(Environment.getExternalStorageDirectory() + "/Android/data/" + getPackageName() + 
                "/"+....+".jpg");           
        if(drawable != null)                
            imageView.setImageDrawable(drawable);

        ((ViewPager) container).addView(imageView, 0);


<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/view_pager"
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:background="@android:color/black"
   />

你的mScreenWidth的值是多少? - dmh
设备屏幕当前的宽度(取决于旋转)。 - Yar
抱歉,我不记得我在哪里使用它,也找不到它了。 - Yar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接