Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ImageView大小显示不正确_Android_Gridview_Bitmap_Imageview_Android Gridview - Fatal编程技术网

Android ImageView大小显示不正确

Android ImageView大小显示不正确,android,gridview,bitmap,imageview,android-gridview,Android,Gridview,Bitmap,Imageview,Android Gridview,我无法以正确的大小显示ImageView。我读过的几乎所有文章都涉及在布局文件中创建的ImageView。然而,在我的例子中,我以编程方式创建ImageView 我正在尝试显示存储中特定文件夹中的所有图像。检索到的位图将放置在GridView中包含的ImageView中 这是我的密码: //pass an array containing all images paths to adapter imageGrid.setAdapter(new GridViewAdapter(getActivit

我无法以正确的大小显示ImageView。我读过的几乎所有文章都涉及在布局文件中创建的ImageView。然而,在我的例子中,我以编程方式创建ImageView

我正在尝试显示存储中特定文件夹中的所有图像。检索到的位图将放置在GridView中包含的ImageView中

这是我的密码:

//pass an array containing all images paths to adapter
imageGrid.setAdapter(new GridViewAdapter(getActivity(), FilePathStrings));
GridVewAdapter代码的一部分:

public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;

            if(convertView == null){
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setPadding(5, 5, 5, 5);
                imageView.setAdjustViewBounds(true);

            }else{
                imageView = (ImageView) convertView;
            }

            imageView.setTag(filepath[position]);
            new LoadImages(imageView).execute();

            return imageView;
        }
检索位图的异步任务:

private class LoadImages extends AsyncTask<Object, Void, Bitmap> {

        private ImageView imgView;
        private String path;

        private LoadImages(ImageView imgView) {
            this.imgView = imgView;
            this.path = imgView.getTag().toString();
        }

        @Override
        protected Bitmap doInBackground(Object... params) {
            Bitmap bitmap = null;

            BitmapFactory.Options bmOptions = new BitmapFactory.Options();
            bmOptions.inJustDecodeBounds = false;
            bmOptions.inSampleSize = 6;

            bitmap = BitmapFactory.decodeFile(path, bmOptions);
            try {

                int dimension = getSquareCropDimensionForBitmap(bitmap);
                bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension);

            }catch (Exception e) {
                e.printStackTrace();
            }

            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {

            if (!imgView.getTag().toString().equals(path)) {
                return;
            }

            if(result != null && imgView != null){
                imgView.setVisibility(View.VISIBLE);
                imgView.setImageBitmap(result);

            }else{
                imgView.setVisibility(View.GONE);
            }
        }
    }
布局文件中的GridView:

    <GridView
    android:id="@+id/imageGridView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnWidth="30dp"
    android:numColumns="5"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
    android:layout_marginTop="30dp">

</GridView>
我得到的结果是:

圆圈细线实际上是显示的图像视图


非常感谢您的帮助。提前谢谢你

我在GridView上方有其他视图,因此无法设置其高度以填充.xml文件中的\u parent/match\u parent,因为它会影响上面的视图

<GridView
android:id="@+id/imageGridView"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:verticalSpacing="5dp"
android:horizontalSpacing="5dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:layout_marginTop="30dp">
我的问题的解决方案是以编程方式设置GridView的高度和宽度

替换:

imageView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
为此:

imageView.setLayoutParams(new GridView.LayoutParams(int height, int width));
说明:


如果有更好的答案,请发布:

您是否尝试将布局高度设置为与父视图匹配?我无法这样做,因为GridView上方还有其他视图,但我找到了解决方案。谢谢你的帮助!GridView上方还有其他视图,因此我无法设置填充父视图的高度。我求助于以编程方式设置GridView的高度和宽度,它可以正常工作。感谢您的帮助:
imageView.setLayoutParams(new GridView.LayoutParams(int height, int width));