ImageView 不显示图像

ImageView doesn't display images

我想在 ImageView 中滑动 3 张图像,当我 运行 我的应用程序时,它在 ViewPager 中膨胀,我可以滑动 3 张空白 pages/images , 不显示图像。 图片位于 res/drawable 文件夹中。

我已尝试将此处提出的每一行代码都添加到堆栈溢出中,因为我查看了与此事相关的所有帖子(您将在我将提供的代码中看到它们。 我已尝试将图像缩小到 300x300,但它仍然不起作用。 我试着把图片放在drawable文件夹的子文件夹里,或者放在hdpi, mdpi,xdpi...etc文件夹里,编译出错。

1)xml 文件 activity:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="match_parent"
        android:layout_height="480dp"
        android:visibility="visible"
        tools:visibility="visible"> </androidx.viewpager.widget.ViewPager>


</RelativeLayout>

2)custom_layout代码(imageView):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerInside"
        android:src="@mipmap/ic_launcher" />

</RelativeLayout>

3) 整个 ViewPagerAdapter:

package com.example.apptest;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;

public class ViewPagerAdapter extends PagerAdapter {

    private Context context;
    private LayoutInflater layoutInflater;
    private Integer[] images = {R.drawable.resized1, R.drawable.resized2, R.drawable.resized3};

    public ViewPagerAdapter(Context context){
        this.context = context;
    }


    @Override
    public int getCount() {
        return images.length;
    }

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

    @Override
    public Object instantiateItem( ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.custom_layout, null);
        ImageView imageView =  view.findViewById(R.id.imageView);
        imageView.setImageResource(images[position]);            
        container.addView(view);
        return view;
    }



    @Override
    public void destroyItem( ViewGroup container, int position,  Object object) {
        ViewPager vp = (ViewPager) container;
        View view = (View) object;
        vp.removeView((View)view);

    }

}

4) android 清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.apptest">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission 
android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:largeHeap="true"
        android:hardwareAccelerated="false"

        android:theme="@style/AppTheme">
        <activity android:name=".menuSliderActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MainActivity"></activity>

    </application>

</manifest>

5) java activity代码:

package com.example.apptest;

import android.app.Activity;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

public class menuSliderActivity extends AppCompatActivity {

    private ViewPager viewPager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menu_slider);

        viewPager = (ViewPager) findViewById(R.id.viewPager);
        ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(this);
        viewPager.setAdapter(viewPagerAdapter);

    }

}

我通常应该能够看到我的图像并滑动浏览它们,但我没有收到任何错误,而且页面是空白的。

尝试做这个测试

将wrap_content替换为match_parent

<ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent" 
        android:layout_height="match_parent"
        android:scaleType="centerInside"
        android:src="@mipmap/ic_launcher" />

这对我来说非常有用

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

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

而不是这个

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

@Override
public void destroyItem( ViewGroup container, int position,  Object object) {
    ViewPager vp = (ViewPager) container;
    View view = (View) object;
    vp.removeView((View)view);

}

只需更改此

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