我希望有人可以就如何提高我的应用程序滚动性能提出一个想法。
基本上我在辅助线程中生成了tile / images,一旦准备就绪,我将它们添加到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中添加的切片完美配合。
答案 0 :(得分:0)
我在项目中遇到了同样的问题。你为什么在GestureDetector中使用自己的归档机制? ScrollView已经处理了所有这些。解决方案我发现, 1.尝试在代码中减少 if()条件和不需要的嵌套if()条件。 2.请写出乐观的代码结构是增加滚动视图速度而没有混蛋的唯一方法。但是你犹豫了上一步,Scrollview受到了影响。 谢谢。