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 に答える