我希望有人可以就如何提高我的应用程序的滚动性能给出一个想法。
基本上,我在辅助线程中生成了图块/图像,一旦它们准备好,我就会使用 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 中的图块完美配合。