1

ImageView、ListView、いくつかの TextViews などとして ScrollView にラップされたレイアウトがあります。ユーザーがスクロールするたびに、親ビューはすべての子ビューの draw() メソッドを呼び出します。私のImageViewはその場で構築された複雑なビットマップであるため、私のimageviewのdraw()が継続的に呼び出され、ImageView.onDraw()に委任され、次に私の複雑なConstructMyBitmap.draw()に委任され、私の毎回ビットマップ。

scrollevent でこの imageView.onDraw() 呼び出しを抑制する必要があります。スクロールが発生するたびに複雑なビットマップを再描画したくありません。

onDraw()内でスクロールイベントを識別する方法は?

または、これを処理するより良い方法はありますか?

ロマン・ガイへ:

   protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        if(chart != null && chart.shdRedraw())
            {
               chart.draw(canvas);
        }else
            {
              //Do nothing - Canvas should retain the old data
            }
        // :-) Happy, Now I control when the chart shd be drawn but.. :-(

    }

残念ながら、onDraw() が onScroll イベントと呼ばれ、グラフを描画しないことにした場合、結果は空白のグラフ領域になります。onDraw() で指定されたキャンバスには、以前に描画された情報が含まれていません。onDraw() がキャンバスをフラッシュするかどうかわかりませんか? これに関するガイダンスはありますか?

4

1 に答える 1

1

画面はスクロール時に再描画する必要があるため、目的を達成する唯一の方法は、(View の drawingCacheEnabled プロパティを使用して) ビューをキャッシュすることです。ただし、これはメモリの点でコストがかかります。draw() コードを単純に変更して、高価なビットマップが変更された場合にのみ再作成するようにしてみませんか?

于 2012-03-08T19:17:42.927 に答える