【问题标题】:ViewPager Imageview is showing issueViewPager Imageview 显示问题
【发布时间】:2018-07-20 16:24:04
【问题描述】:

我在 viewpager 中使用 imageview,我想在图像视图中显示图像中心,但它没有在良好的视图中显示。 imageview 提供了在 imageView 左右两边的空白区域。但在某些情况下,它的视野很好。

这是我的 viewpagerAdapter

private class ImagePagerAdapter extends PagerAdapter {
    public ImagePagerAdapter(){
    }

    @Override
    public int getCount() {
        if(visibleImagesCount==0){
            return 1;
        }
        return visibleImagesCount;
    }

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

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

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

    /**
     * Following method is responsible to load images into ViewPager
     * @param container
     * @param position
     * @return
     */
    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        final Context context = getActivity();


LayoutInflater inflater = (LayoutInflater) getActivity()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        RelativeLayout relativeLayout= (RelativeLayout) inflater.inflate(R.layout.view_pager_fragment,null);

        final ImageView imageView= (ImageView)relativeLayout.findViewById(R.id.view_pager_image_view_show);

        RequestManager glide=Glide.with(getContext());
        {

                List<Image> list = dbHelper.getAllVisibleImagesList();


                Image image = list.get(position);

                final String filePath = Constants.Path.IMAGE_LOADING_PATH + imageName;
                Bitmap bitmap;
                if(image.getImageStatus() != ImagesStatus.STATUS_IMAGE_ADDED.getStatus())
                    bitmap = ImageUtils.getBitmap(thumbURL);
                else
                    bitmap= BitmapFactory.decodeResource(context.getResources(), R.drawable.black_image);

                Drawable d = null;
                if(bitmap != null /*&& image.getImageStatus() != ImagesStatus.STATUS_IMAGE_ADDED.getStatus()*/){
                    DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
                    float dpHeight = displayMetrics.heightPixels / displayMetrics.density;
                    float dpWidth = displayMetrics.widthPixels / displayMetrics.density;
                    float scale = getResources().getDisplayMetrics().density;
                    int marginHeightP = (int) (dpHeight * scale + 0.5f);
                    int marginWidthP = (int) (dpWidth * scale + 0.5f);
                    d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap, marginWidthP, marginHeightP, true));
                } else{
                    d = (getResources().getDrawable(R.drawable.pikard));
                }


                glide.load(filePath)
                        .placeholder(d)
                        .fitCenter()
                        .listener(new RequestListener<String, GlideDrawable>() {

                            @Override
                            public boolean onException(Exception e, String model, com.bumptech.glide.request.target.Target<GlideDrawable> target, boolean isFirstResource) {
                                return false;
                            }
                            @Override
                            public boolean onResourceReady(GlideDrawable resource, String model, com.bumptech.glide.request.target.Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                                pb.setVisibility(View.GONE);
                                imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
                                return false;
                            }

                        }).into(imageView);

            }
        }
        container.addView(relativeLayout, 0);
        return relativeLayout;
    }
}

这是我用于在视图寻呼机中使用图像的 XML 文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androd="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
>

<ImageView
    android:id="@+id/view_pager_image_view_show"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    />

</RelativeLayout>

当我设置 scaleType centerInside时,这在图像视图中显示这样的图像

但我想像这样在 imageview 中显示图像

【问题讨论】:

  • 您希望您的图像视图作为您添加的最后一张图像。您可以使用 fitXY,但它会拉伸您的图像。
  • @MohamedMohaideenAH fitXY 不适合图像 centerInside()
  • 我想在 imageView 中显示图像中心,但它在 imageView 的左侧和右侧显示空白:(
  • fit_center 也不起作用
  • 我正在使用 fit_center 但它在 imageView 的左侧和右侧显示空白:(

标签: android android-layout android-viewpager imageview


【解决方案1】:

查看此输出。

xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ImageView
        android:id="@+id/view_pager_image_view_show"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/canoe_water_nature_resized"
        android:scaleType="fitCenter" />

</RelativeLayout>

输出

ScaleType - fitCenter

已编辑
当您的图像高度大于屏幕高度时,就会发生这种情况。它基于 x 轴对齐图像。所以你在左右两边都有空间。

当您的图像宽度大于屏幕宽度时会发生这种情况。它基于 y 轴对齐图像。所以你在顶部和底部都有空间。

解决方案
尽量减少图像高度最大值等于屏幕高度。

【讨论】:

  • 全屏图像进入浏览器时不能这样工作。请添加到全屏图像。
  • 全屏图像在viewpager中提供左右两侧的空白区域
  • @Salman 如果由于您的图像高度高于屏幕尺寸而发生这种情况,我明白您的意思。
  • 我能为它做些什么
  • fitXY 不是我的要求,亲爱的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多