0

我希望有人可以就如何提高我的应用程序的滚动性能给出一个想法。

基本上,我在辅助线程中生成了图块/图像,一旦它们准备好,我就会使用 LayoutParams 将它们添加到特定位置的 RelativeLayout。现在我将这个 RelativeLayout 的大小设置为固定以避免复杂性。这个RelativeLayout 是我添加到ScrollView 中的。

我还监听 ScrollView 的滚动更改事件,因此当我滚动到新位置时可以请求新的磁贴。发生这种情况时,会在辅助线程上生成新的图块,同时我会获得信息以删除不再需要的旧图块(这有助于保持图块的数量不会耗尽内存)。

但是,这里的主要问题是在滚动和添加/删除图块(使用 addview() 和 removeView())时,滚动是生涩的。我在 iOS 中有相同的应用程序,使用相同的方法并且滚动非常完美。

这基本上是我所拥有的:

// Main activity
RelativeLayout tileCanvas = new RelativeLayout(this);
tileCanvas.setLayoutParams(new LayoutParams(800, 10000));
ScrollView scroll = new ScrollView(this).
scroll.addView(tileCanvas);
setContentView(scroll);

...

private void addTile(TileInfo tileInfo) {
    ImageView image = new ImageView(this.getContext());
    image.setImageBitmap(tileInfo.mBitmap);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(tileInfo.mWidth, tileInfo.mHeight);
    params.leftMargin = tileInfo.mLeft;
    params.topMargin = tileInfo.mTop;
    tileCanvas.addView(image, params);

}

我检查了如果我停止调用 addTile() 一段时间后,滚动与当前添加到 tileCanvas 中的图块完美配合。

4

1 回答 1

0

我在我的项目中遇到了同样的问题。为什么要使用自己的 GestureDetector 归档机制?ScrollView 已经处理了所有这些。我找到的解决方案,1.尝试减少代码中的if()条件和不需要的嵌套 if()条件。2.请编写乐观的代码结构是提高滚动视图速度的唯一方法。但是你对上面的步骤犹豫了,Scrollview 都受影响了。谢谢你。

于 2014-10-18T13:01:03.463 回答