ViewPager Imageview显示问题

时间:2018-07-20 16:24:04

标签: android android-layout android-viewpager imageview

我正在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 enter image description here

时在imageview中显示的图像

但是我想像这样在imageview中显示图像 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

请参阅此输出。

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

enter image description here

已编辑
当您的图像高度大于屏幕高度时,会发生这种情况。它根据x轴对齐图像。这样您就可以在左右空间。

enter image description here

当图像宽度大于屏幕宽度时,会发生这种情况。它根据y轴对齐图像。这样您就可以在顶部和底部留出空间。

enter image description here

解决方案
尝试将最大图像高度减小为等于屏幕高度。