ImageView 不显示图像,但获取图像的相同方法适用于应用程序的其他部分
ImageView not displaying the image, but same method to fetch image works in other parts of app
我在 ListView row
中有 3 个 ImageViews
,但由于某种原因它们没有出现。
我正在使用相同的功能在应用程序的另一部分检索图像,它可以毫无问题地获取图像。所以检索图像位图的方法不是问题。
还有什么可能导致图像不显示在 ImageView
中?我调试了 File
不为空。
请帮忙!
在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);
}
});
}
}
XML 的 ListView 行
<?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>
问题在于您的布局 XML。 layout_weight
参数只能在 immediate parent 是 LinearLayout
时使用,但是 ImageView
的 immediate parent 是 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
参数来使它们看起来正确,但希望它们至少现在会出现。
我在 ListView row
中有 3 个 ImageViews
,但由于某种原因它们没有出现。
我正在使用相同的功能在应用程序的另一部分检索图像,它可以毫无问题地获取图像。所以检索图像位图的方法不是问题。
还有什么可能导致图像不显示在 ImageView
中?我调试了 File
不为空。
请帮忙!
在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);
}
});
}
}
XML 的 ListView 行
<?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>
问题在于您的布局 XML。 layout_weight
参数只能在 immediate parent 是 LinearLayout
时使用,但是 ImageView
的 immediate parent 是 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
参数来使它们看起来正确,但希望它们至少现在会出现。