gpt4 book ai didi

android - ListView 中图像的低 FPS

转载 作者:行者123 更新时间:2023-11-30 01:46:15 26 4
gpt4 key购买 nike

我正在为我大学的餐厅制作一个应用程序。

我有一个 ScrollView,里面有 2 个 ListView(一个用于第一道菜,另一个用于第二道菜)。

我用下面的代码创建了 ListView:

ListView lista = (ListView)view.findViewById(R.id.listaprimero); //first dishes
ArrayList<Plato> arraydir = new ArrayList<Plato>(); //array for first dishes

ListView listaS = (ListView)view.findViewById(R.id.listasegundo); //second dishes
ArrayList<Plato> arraydirS = new ArrayList<Plato>(); //array for second dishes

Plato plato; //Object "dish"

//Now for each dish that I want to add, I use the object "Plato"
//to create a dish with its photo and its name.
//Then I add it to the ArrayList

plato = new Plato(getResources().getDrawable(R.drawable.macarrones), "Macarrones", "Amenizador");
arraydir.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.arroz), "Arroz tres delicias", "CEO");
arraydir.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.ternera), "Ternera", "Amenizador");
arraydir.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.pollo), "Filetitos de pollo", "Directora RRHH");
arraydirS.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.merluza), "Merluza al horno", "Directora RRHH");
arraydirS.add(plato);

// I create the Adapter for the dishes
AdapterPlatos adapter = new AdapterPlatos(getActivity(), arraydir);
AdapterPlatos adapterS = new AdapterPlatos(getActivity(), arraydirS);

// Set it
lista.setAdapter(adapter);
listaS.setAdapter(adapterS);

现在,当我运行该应用程序时,我的 FPS 非常低,Android Studio 控制台每次都显示:“跳过 32 帧!应用程序可能在其主线程上做了太多工作。”

但是当我像这样制作菜肴时:

plato = new Plato(getResources().getDrawable(R.drawable.macarrones), "Dish 1", "Amenizador");
arraydir.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.macarrones), "Dish 2", "Amenizador");
arraydir.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.macarrones), "Dish 3", "Amenizador");
arraydir.add(plato);
plato = new Plato(getResources().getDrawable(R.drawable.macarrones), "Dish 4", "Amenizador");
arraydirS.add(plato);
...

对于同一张照片,不会出现问题。

PD:照片大小在70-200Kb之间,不是大文件。

为什么?

谢谢大家。

最佳答案

Drawable(Bitmap) 解码并加载到内存中显示仍然需要时间。

如果您的 Plato 对象只保留可绘制对象的资源 ID,而不是可绘制对象本身,那就更好了。这将使用更少的内存。然后在你的适配器 getView() 中,你可以使用类似 Glide 的东西将该资源加载到您的 ImageView 中。

Glide.with(context).load(R.drawable.macarrones).into(imageView);

关于android - ListView 中图像的低 FPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33677936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com