Низкая производительность ViewPager завышена с помощью ImageViews - PullRequest
0 голосов
/ 02 января 2019

Я занимаюсь разработкой приложения для Android, в котором ViewPager раздувается с помощью ImageViews.У меня есть массив URL-адресов изображений, но в разных случаях массив имеет разные размеры, поэтому загрузка должна выполняться динамически.Я использую цель библиотеки Picasso для загрузки изображений в растровый массив ArrayList, а затем обновляю ViewPagerAdapter

pagerAdapter.updateImages(images); // passing ArrayaList<Image> to the adapter
                    pagerAdapter.notifyDataSetChanged();
                    int currentItem = pager.getCurrentItem();
                    pager.setAdapter(pagerAdapter);
                    pager.setCurrentItem(currentItem);
                    pager.setOffscreenPageLimit(images.size()-1);

Проблема связана с производительностью приложения - некоторые изображения не загружаются должным образом в ImageView, а также когдаЯ начинаю перелистывать изображения, у меня очень низкая производительность по некоторым элементам (некоторые из них с разрешением 6000x6000) XML для PagerView

    <android.support.v4.view.ViewPager
    android:id="@+id/productPager"
    android:layout_width="match_parent"
    android:layout_height="400dp">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/productImage"
        android:scaleType="fitXY"/>
</android.support.v4.view.ViewPager>

Вот как я создаю и уничтожаю объекты:

public Object instantiateItem(@NonNull ViewGroup container, int position) {
        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate(R.layout.image_product, null);
        ImageView imageView = view.findViewById(R.id.productImageView);
        if(images.size()!=0) {
            imageView.setImageBitmap(images.get(position));
        }
        container.addView(view, 0);
        return view;
    }

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

Независимо от того, на что я изменяю scaleType, некоторые изображения не помещаются в ImageView.До этого у меня была похожая проблема, но изображение, которое я должен был загрузить, было одним изображением, и я смог вставить его в ImageView, используя метод picasso fit ().Производительность и внешний вид изображения после этого идеальны.Дайте мне несколько советов, как загрузить изображения в ViewPager, чтобы я мог использовать их соответствующим образом.

...