Низкая производительность в Listview с изображениями - PullRequest
0 голосов
/ 22 октября 2018

Я провел много исследований, прежде чем открывать этот заголовок, но почему-то я не получил желаемый результат.Мой Listview ускорился, но этого недостаточно.

Когда я делаю просмотр списка вверх и вниз, иногда он замедляется и появляются небольшие заморозки.

Это потому, что Listview состоит только из изображений?Но когда я проверяю другие приложения, я вижу, что в них нет проблем.

Не могли бы вы просмотреть?

Это мой код адаптера:

public class pop_Adapter extends BaseAdapter  {
    private LayoutInflater userInflater;
    private List<pop_User> userList;
    Activity aa;
    public pop_Adapter(Activity activity, List<pop_User> userList) {
        userInflater = (LayoutInflater) activity.getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        aa = activity;
        this.userList = userList;
    }

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

    @Override
    public Object getItem(int i) {
        return userList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    class ViewYerTutucu{

        RelativeLayout rela1;
        LinearLayout activity_main,lin1;
        TextView indir;
        ImageView imageViewUserPicture;

        ViewYerTutucu(View v){
            activity_main = (LinearLayout) v.findViewById(R.id.activity_main);
            indir = (TextView) v.findViewById(R.id.indirmeSayisi);
            imageViewUserPicture = (ImageView) v.findViewById(R.id.resim);
            lin1 = (LinearLayout) v.findViewById(R.id.lin1);

            rela1 = (RelativeLayout) v.findViewById(R.id.rela1);
            rela1.getLayoutParams().height = (int) ( (MainActivity.height / MainActivity.width) * MainActivity.width/2 );  //(int)MainActivity.width/2-36;
            indir.setTextSize(MainActivity.pxToDp((int)MainActivity.width/23));

        }

    }


    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {

        View lineView = view;

        ViewYerTutucu tutucu=null;

        if (lineView == null) {
            lineView = userInflater.inflate(R.layout.custom_pop, viewGroup, false);
            tutucu=new ViewYerTutucu(lineView);
            lineView.setTag(tutucu);
        }
        else{
            tutucu= (ViewYerTutucu) lineView.getTag();
        }

        final pop_User user = userList.get(i);

        tutucu.indir.setText(user.getIndirme());

        Glide.with(aa).load(user.getTags()).into(tutucu.imageViewUserPicture);

        final ViewYerTutucu finalTutucu = tutucu;
        tutucu.lin1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                MainActivity.hangiBolum = "pop-"+(i*2);
                fragoyunsifir.ResimDegistir(user.getTags());
                fragoyunsifir.paylas.setTag(user.getId());
                fragoyunsifir.indir.setTag(user.getTags());
                fragoyunsifir.button1.setTag(user.getResim());
                Animation fadeOut = AnimationUtils.loadAnimation(aa, R.anim.fade_in_acilis);
                fragoyunsifir.activity_main.startAnimation(fadeOut);
                fadeOut.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        fragoyunsifir.gorunurYap();
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {

                    }
                });
            }
        });



        tutucu.indir.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(aa, finalTutucu.indir.getText()+" downloads", Toast.LENGTH_SHORT).show();
            }
        });

        if(reachedEndOfList(i)) loadMoreData();

        return lineView;
    }




    private boolean reachedEndOfList(int position) {
        // can check if close or exactly at the end
        return position == getCount() - 1;
    }

    private void loadMoreData() {

        MainActivity.News();

    }
}

Примеризображение загружено: https://source.unsplash.com/-hI5dX2ObAs/540x720

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Для плавной прокрутки и повышения производительности добавьте Recyclerview в ScrollView и установите

 android:nestedScrollingEnabled="false"

Это загрузит весь контент в вашем RecyclerView ... в противном случае он будет загружаться только при прокрутке вниз.Это то, что я думаю.

А также установите

    @Override
    public int getItemViewType(int position) {
    return position;
   }

в вашем адаптере утилита просмотра.
Это предотвращает положение изображения, которое изменится, если вы продолжите прокрутку вниз и получитенаверх.

0 голосов
/ 22 октября 2018

Лучше всего использовать RecyclerView для плавной прокрутки и повышения производительности.Взгляните на это руководство , чтобы реализовать его в своем приложении.Также рассмотрите возможность использования библиотеки загрузки изображений, например picasso .Это потому, что unsplash имеет изображения с высоким разрешением, которые требуют времени для загрузки.Однако библиотека загрузчика изображений позволяет кэшировать и сжимать изображения, чтобы они могли быстро загружаться в ваши представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...