刷卡时ViewPager太慢(使用Picasso)

时间:2015-11-09 03:02:37

标签: android android-studio picasso

我从我的画廊获取所有图像。(三星galaxy s5的照片)
我可以从Viewpager查看图像 但是当我开始Swiping时。它太慢了。
几秒钟后,应用程序崩溃,没有logcat中的错误。

public class Paging extends PagerAdapter {
        private ArrayList<String> IMAGES = new ArrayList<>();
        private Context context;
        private LayoutInflater layoutInflater;
        public Paging(Context context) {
            this.context = context;
        }

        @Override
        public int getCount() {
            return MainActivity.IMAGES.size();
        }

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

        @Override
        public View instantiateItem(View container, int position) {
            IMAGES = (ArrayList<String>) MainActivity.IMAGES.clone();



            layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View item_view = layoutInflater.inflate(R.layout.imagepager_layout, (ViewGroup) container, false);
            ImageView imageView = (ImageView) item_view.findViewById(R.id.img);


            Picasso.with(context)
                    .load(IMAGES.get(position))
                    .placeholder(R.drawable.plusbtn)
                    .into(imageView);

        ((ViewGroup) container).addView(item_view);

            return item_view;


        }

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

我的viewPager添加适配器。

 viewPager = (ViewPager)findViewById(R.id.view_pager);
 adap = new Paging(MainActivity.this);
 viewPager.setAdapter(adap);

我的XML ..

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_gravity="center"
        android:gravity="center" />
</LinearLayout>

我的观点传单。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:orientation="vertical"
    >

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></android.support.v4.view.ViewPager>
</LinearLayout>

2 个答案:

答案 0 :(得分:3)

这很可能是因为加载的图像像素数据太多而不是必要的(以适应您的视图大小)。如果您的图像尺寸很大,默认情况下Picasso会将图像的完整大小加载到内存中,从而导致帧速率降低以及OOM异常。

快速解决方法是使用Picasso.with().load().resize(width, height)。它将使Picasso能够将缩减采样版本的图像加载到内存中。在UI方面,您可以为fitCenter使用ImageView缩放类型。

为了更好地理解这个概念,我建议您在此处阅读有关此主题的Google开发者指南:Loading Large Bitmaps Efficiently

答案 1 :(得分:-1)

1. Picasso将模式设置为RGB565,设置内存缓存和光盘缓存。

2.在ViewPager中重复使用视图。

3. ViewPager setPageoffset(1);

4.try:

<application
    android:largeHeap="true"/>