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;
}
我想在 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;
}