0

現在、sqlite ファイルの内容に基づいて一連の正方形を動的に描画するクラスがあります。データが非常に大きいため、描画は画面の何倍も大きくなります。これを行うために提案された多くの方法を読みましたが、最善のアプローチがわかりません。レンダリング後に画像を変更しないため (再起動時に動的にレンダリングする必要があるだけです)、ここにリストされている最初の回答が最良のようですが、その方法を完全には理解していません。

私が正しく理解していれば:

  1. ビットマップを作成し、
  2. キャンバスを作成します(画面解像度よりも大きい)
  3. キャッシュされたビットマップを取得し、
  4. キャンバスに対してビットマップをレンダリングします。

しかし、既存のコード内でこれを実現するための知識が不足しています。私の既存のコードは、非常に大きなキャンバスを作成するだけです (境界を定義せず、描画を開始するだけです)。私のメインクラスは次のようになります。

package com.example.drawdemo;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class DrawDemo extends Activity {
    DrawView drawView;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    drawView = new DrawView(this);
    drawView.setBackgroundColor(Color.WHITE);
    setContentView(drawView);
    }
}

そして、DrawView クラスは次のようになります。

public class DrawView extends View {

    public DrawView(Context context) {
        super(context);            
    } 

    @Override
    public void onDraw(Canvas canvas) {

        //LOTS OF CODE HERE to figure out how to render rectangles through loops
        //  similar to lines like this
        canvas.drawRect(xStart, rectYPointer, xEnd, rectYPointer+rectSize, paint);
        // or this
        canvas.drawText(String.valueOf(rectSize), 130, rectYPointer*2, paint);

    }

}

下にスクロールしてAndroid画面よりも大きいこの大きな画像を表示できるようにするために、私が取っているアプローチは正しいですか? もしそうなら、正しい方法だと思う回答にリストされているアプローチに準拠するようにコードを移行するにはどうすればよいですか?

4

1 に答える 1

0

リンクされたトピックの要点がわからなかったのではないかと思います。それはあなたが達成しようとしていることとはかなり異なります。

このトピックは、後で使用するビットマップに描画することについてです。

あなたはすでに構築されたビットマップを持っていますか?(または少なくとも、以下を使用してリソースからロードできます:

BitmapFactory.decode ...(入力に応じたリソースまたはファイル。こちらのドキュメントを参照してください)

画面内でスクロールするために、キャンバスが巨大である必要はありません。キャンバスのサイズはビューのサイズ(ここでは画面のサイズ)ですが、適用するスクロール位置に従ってビットマップを描画します。

参照: canvas.drawBitmap()のドキュメントcanvas.translateも役立ちます。

基本的に必要なのは、ビューで(bitmapdecodeを使用して)読み込み中のビットマップの参照を取得することです。次に、onDrawで、ビューのキャンバスにビットマップを描画して、画面に表示します。次に、スクロール効果を追加するには、キャンバスに描画するときにキャンバスのy平行移動を変更してみます。

それがお役に立てば幸いです。

キャンバスへの描画に関する詳細(および良い例)については、APIデモプロジェクトのソースコードを開くことをお勧めします。

API Demos -> Graphics -> TouchPaint
于 2013-03-09T09:05:36.113 に答える