gpt4 book ai didi

android - 在 Android 中优化位图创建/调整大小

转载 作者:行者123 更新时间:2023-11-29 18:03:37 24 4
gpt4 key购买 nike

我正在寻找有关如何优化以下代码的想法,它是 for 循环的主体:

final BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
options.inJustDecodeBounds = false;
ImageButton view = new ImageButton(this);
view.setBackgroundColor(0);
view.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
finalThis.onBorderClicked(v);
}
});
view.setTag(i); //i is the loop counter

Bitmap big = BitmapFactory.decodeResource(getResources(), borders[i], options);
Bitmap smaller = Bitmap.createScaledBitmap(big, borderDimension, borderDimension, false);

view.setImageBitmap(smaller);

view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT));
((LinearLayout.LayoutParams)view.getLayoutParams()).setMargins(0, 0, -5, 0);
group.addView(view);

big.recycle();

基本上我有 600x600 的图像,我想让它们的大小达到 50dp 左右。所以很自然地,我首先将样本大小设置为 4(600/4 = 150),这样我就不会占用不必要的内存,然后进一步将图像缩小到指定大小。然后我用它把它加载到 ImageButton 上,我还回收了更大的、现在没用的 Bitmap

这是一个动态 UI 创建代码,ImageButtons 被添加到 Horizo​​ntalScrollView。问题是,在一种情况下,我必须向 UI 添加一百多个 ImageButtons,而这段代码非常慢。

问题是:我怎样才能让它工作得更快?它当前在 MainActivity 上执行,多线程(可能是 AsyncTask)在这种情况下有帮助吗?有没有其他方法可以更快地将位图设置为所需的大小?如果没有办法使这个过程显着加快,那么有没有一种方法可以一个一个地(但以相同的顺序)逐步添加 ImageButton,以便在所有这些发生时 UI 不会被卡住?

最佳答案

将您的代码从主线程中取出不会使应用程序处理图像的速度更快,但它会在该过程发生时保持 UI 对用户的响应,并且当您有这么多数据要处理时,这绝对是必要的步骤一次加载。但是,请记住,您不能从主线程以外的任何线程操作 View 层次结构,因此您不能将整个操作放在 AsyncTask.doInBackground() 中。您将不得不拆分出花费最多时间的行(即您的 decodeResource()createScaledBitmap() 调用),但是实例化和添加 View 的代码parent 需要在 onPostExecute()publishProgress() 中发生(取决于您如何实现任务逻辑)。

Thing is, in one case, I've got to add more than hundred ImageButtons to the UI and this code is awfully slow.

另一件需要牢记的重要事情是,在任何时候在您的层次结构中拥有超过 100 个基于图像的 View 仍然是一大块内存浪费。加速这个过程的最好方法不是一次添加所有 View ,而是只在需要时添加它们(即当用户滚动时),然后删除/回收不再显示在屏幕上的 View 。这就是 AdapterView 实现的工作方式,仅使用您需要的内存,您的应用程序将更快、更高效。

我知道框架中没有Horizo​​ntalListView,但是有第 3 方实现为您提供此功能,或者您可以查看其中一个框架类的源代码以构建您自己的来自。

关于android - 在 Android 中优化位图创建/调整大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493429/

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