我正在尝试使用viewpager创建4个图像的应用程序的介绍游览。 它花了很多时间从上一张图片滑到下一张图片。
我在滑动
时跟踪登录logcatI/Choreographer: Skipped 100 frames! The application may be doing too much work on its main thread.
I/Choreographer: Skipped 94 frames! The application may be doing too much work on its main thread.
我尝试了以下方法:
1 setImageResource()在UI线程上进行位图读取和解码,这可能导致延迟打嗝。如果这是一个问题,请考虑使用2.setImageDrawable(android.graphics.drawable.Drawable)或3.setImageBitmap(android.graphics.Bitmap)和BitmapFactory。 图像的大小和分辨率也可能导致滚动速度慢, 尝试创建大图像的缩略图并使用。(我将图像尺寸从100kb缩小到30-50kb)
还尝试了下面的堆栈溢出答案:
Memory leak with images in viewpager
静止图像在视图寻呼机中从前一个到下一个图像花费了很多时间。 我在不同的设备上测试过它。在moto x上播放其最慢和其他设备,如三星,摩托E,联想都快一点,但仍然没有达到标记。
我在drawable文件夹中有4张图片并使用下面的代码我试图滑动图片。
@Override
public int getCount() {
return mResources.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == (object);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.pager_item, container, false);
ImageView imageView = (ImageView) itemView.findViewById(R.id.img_pager_item);
imageView.setImageDrawable(mResources[position]);
container.addView(itemView);
return itemView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((LinearLayout) object);
}
提前致谢!
答案 0 :(得分:4)
尝试将图像放在特定的Drawable文件夹中以不同的密度查看!所以你没有任何渲染问题
默认情况下,Android会缩放您的位图drawable(.png,.jpg和.gif文件),以便它们在每个设备上以适当的物理大小呈现。例如,如果您的应用程序仅为基线(中等屏幕密度(mdpi))提供位图可绘制,则系统在高密度屏幕上进行缩放,并在低密度屏幕上缩小它们。此缩放可能会导致位图中的伪像,缩小或放大。为了确保您的位图看起来最好,您应该为不同的屏幕密度添加不同分辨率的替代版本。
答案 1 :(得分:3)
我刚刚解决了它,将所有4张图片放入drawable到不同的文件夹xhdpi,xxhdpi,mdpi,xxxhdpi。
我发现moto x play是xxhpi,但xxhdpi中没有图像,这就是为什么它没有用。
现在你可以用任何速度滑动,可能与FLASH的速度:D
答案 2 :(得分:0)
请使用Glide加载ViewPager的图像。它将提高ViewPager的分页性能,解决OutOfMemoryError等。
示例:
Glide.with(activity)
.load(ContextCompat.getDrawable(context, R.drawable.ic_about_us))
.into(imageView);