ImageView不显示图像,但获取图像的方法与app的其他部分相同

时间:2015-01-11 02:16:33

标签: android image listview bitmap imageview

我在ImageViews中有3 ListView row,但由于某种原因他们没有出现。

我使用相同的功能来检索应用程序的另一部分中的图像,它可以获得没有问题的图像。因此,检索图像位图的方法不是问题。

还有什么可能导致图片无法显示在ImageView中?我调试了,File不是null。

请帮忙!

在getView方法中显示图像的BaseAdapter

                try {
                    if (user.getGameOwned().size() > 0) {
                        String coverPhotoName = user.getGameOwned().get(0).getCoverPhoto();
                        if (coverPhotoName != null) {
                            ImageHelper.loadOrDownloadGameCover(mContext, coverPhotoName,
                                    holder.iv2, holder.gameCoverSpinner1);
                        }
                    }
                }
                catch (Exception e) { e.printStackTrace(); }

                try {
                    if (user.getGameOwned().size() > 1) {
                        String coverPhotoName = user.getGameOwned().get(1).getCoverPhoto();
                        if (coverPhotoName != null) {
                            ImageHelper.loadOrDownloadGameCover(mContext, coverPhotoName,
                                    holder.iv3, holder.gameCoverSpinner2);
                        }
                    }
                }
                catch (Exception e) { e.printStackTrace(); }

                try {
                    if (user.getGameOwned().size() > 2) {
                        String coverPhotoName = user.getGameOwned().get(2).getCoverPhoto();
                        if (coverPhotoName != null) {
                            ImageHelper.loadOrDownloadGameCover(mContext, coverPhotoName,
                                    holder.iv4, holder.gameCoverSpinner3);
                        }
                    }
                }
                catch (Exception e) { e.printStackTrace(); }

将图像提取为位图的方法

public static void loadOrDownloadGameCover(final Context context, final String coverPhotoName,
                                           ImageView gameCover, final ProgressBar loadingSpinner) {

    if (isGameCoverDownloaded(context, coverPhotoName)) {
        loadingSpinner.setVisibility(View.GONE);

        try {
            File file = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES),
                    coverPhotoName);
            gameCover.setImageBitmap(BitmapFactory.decodeFile(file.toString()));
        }
        catch (Exception e) { e.printStackTrace(); }
    }
    else {
        String uri = GlobalVars.URL_GAME_COVER_DOWNLOAD + coverPhotoName;
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.placeholder)
                .showImageForEmptyUri(R.drawable.placeholder)
                .showImageOnFail(R.drawable.placeholder)
                .build();

        ImageLoader.getInstance().displayImage(uri, gameCover, options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                loadingSpinner.setVisibility(View.VISIBLE);
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                loadingSpinner.setVisibility(View.GONE);
            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                loadingSpinner.setVisibility(View.GONE);
                saveGameCover(context, coverPhotoName, loadedImage);
            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                loadingSpinner.setVisibility(View.GONE);
            }
        });
    }
}

ListView行的XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:paddingLeft="10dp"
    android:paddingRight="10dp" >

    <LinearLayout
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="vertical"
        android:background="@drawable/card_white_selector"
        android:padding="20dp" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="30dp" >

            <ImageView
                android:id="@+id/avatar"
                android:layout_width="70dp"
                android:layout_height="70dp"
                android:layout_marginRight="14dp"
                android:adjustViewBounds="true"
                android:background="@drawable/avatar_bg" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:orientation="vertical" >

                <com.walintukai.lovelup.widgets.CustomTextView
                    android:id="@+id/username"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/CardUsernameTextView" />

                <com.walintukai.lovelup.widgets.CustomTextView
                    android:id="@+id/details"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/CardUserDetailsTextView" />

                <com.walintukai.lovelup.widgets.CustomTextView
                    android:id="@+id/location"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    style="@style/CardUserDetailsTextView" />

            </LinearLayout>

        </LinearLayout>

        <com.walintukai.lovelup.widgets.CustomTextView
            android:id="@+id/text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="#666"
            android:textSize="16sp" />

        <LinearLayout
            android:id="@+id/games_container"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_gravity="center_horizontal">

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/cover_one"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center_vertical"/>

                <ProgressBar
                    android:id="@+id/cover_one_spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    style="@android:style/Widget.ProgressBar.Small"
                    android:visibility="gone" />

            </FrameLayout>

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/cover_two"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center_vertical"
                    android:layout_marginLeft="10dp"
                    android:layout_marginRight="10dp"/>

                <ProgressBar
                    android:id="@+id/cover_two_spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    style="@android:style/Widget.ProgressBar.Small"
                    android:visibility="gone" />

            </FrameLayout>

            <FrameLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

                <ImageView
                    android:id="@+id/cover_three"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:adjustViewBounds="true"
                    android:layout_gravity="center_vertical"/>

                <ProgressBar
                    android:id="@+id/cover_three_spinner"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    style="@android:style/Widget.ProgressBar.Small"
                    android:visibility="gone" />

            </FrameLayout>

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

1 个答案:

答案 0 :(得分:1)

问题在于您的布局XML。仅当立即父级为layout_weight时才能使用LinearLayout参数,但ImageView的直接父级为FrameLayout。尝试将layout_weight值移至FrameLayout,如下所示:

    <LinearLayout
        android:id="@+id/games_container"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="center_horizontal">

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/cover_one"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center_vertical"/>

            <ProgressBar
                android:id="@+id/cover_one_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                style="@android:style/Widget.ProgressBar.Small"
                android:visibility="gone" />

        </FrameLayout>

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/cover_two"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"/>

            <ProgressBar
                android:id="@+id/cover_two_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                style="@android:style/Widget.ProgressBar.Small"
                android:visibility="gone" />

        </FrameLayout>

        <FrameLayout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1">

            <ImageView
                android:id="@+id/cover_three"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:layout_gravity="center_vertical"/>

            <ProgressBar
                android:id="@+id/cover_three_spinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                style="@android:style/Widget.ProgressBar.Small"
                android:visibility="gone" />

        </FrameLayout>

    </LinearLayout>

您可能需要更多地使用ImageView参数来使它们看起来正确,但希望它们至少会出现在现在。