3


皆さんこんにちは!
拡大鏡を実装しようとしています。その下のコンテンツが大きく見えるようにする必要があります。

数時間後、解決策は1つしかありません。

私のxmlファイルで、次のようなものを宣言します(疑似コード):

<ZoomView>
    some other content views

    <View 
        android:id="@+id/magnifier
    />
</ZoomView>

このコードでは、ZoomView は RelativeLayout を拡張したカスタム ビューです。View with magnifier id は、コンテンツをズームする実際の拡大鏡です。

これは次のようになります。


拡大鏡

では、コードで何が起こるか。

ZoomView の onDraw メソッドでは、このことを行います。

@Override
protected void onDraw(android.graphics.Canvas canvas)
{
    Bitmap  bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas bitmapCanvas = new Canvas(bitmap);
    super.onDraw(bitmapCanvas);

    // some code that detects magnifier view position and size, 
    // than gets 1 area image, scale it to make in 2x bigger.
    // And then replace 2 area with this scaled image.

    // draw result on canvas
    canvas.drawBitmap(bitmap, new Matrix(), null);
}

このコードは正常に動作しますが、遅すぎます。誰かが私に他の解決策を教えてくれますか、またはこれを最適化するにはどうすればよいですか?

何か間違っていたらすみません、これが私の最初の質問です。

4

2 に答える 2

1

あなたは正しい軌道に乗っていますが、 onDraw メソッドから処理の一部を取り除くことでパフォーマンスを改善できると思います。元のサイズの画像/コンテンツが静的である場合、onCreate 中にコンテンツの拡大バージョンを簡単に作成できます (または、AsyncTask でさらに良い場合)。その後、拡大鏡が移動したときに、コンテンツのどの領域が必要かを計算するだけです。毎回生成しようとするのではなく、拡大版を表示します。

コンテンツが動的である場合でも、コンテンツの 2 つの一定のコピー (1 つは通常サイズ、もう 1 つは拡大) を保持することで同様の処理を実行でき、両方が常に最新の状態に保たれます。

それ以外の場合、ソリューションは正しい軌道に乗っています。これが役立つことを願っています。

于 2012-05-06T23:50:16.617 に答える