2011-03-26 20 views
3

私はこれを「正しい」方法でやっているのか分からないので、他のオプションも開いています。ここに私が達成しようとしているものがあります:アンドロイド表示に入れる画像を動的に作成/描画する

グラフを含むビューが必要です。グラフは、アプリケーション自体によって動的に作成される必要があります。グラフはズーム可能でなければならず、おそらくスクリーン(800x600程度)より大きくなるでしょう。

私は単純な散布図を開始する予定です。最終的には、グラフがズームされている間に画面に留まる軸を持つフィット線とエラーバーを持つ散布図が必要です...おそらく、ズーム機能を重ね合わせた3つの画像がつながっていることを意味します。

私はすでに描画可能なビューを作成しています。ピンチズームとドラッグを集中的に使用でき、画像の自動拡大縮小、画像の動的切り替え、画面より大きな画像の取り込みが可能です。画像を結びつけることは問題ではないはずです。

しかし、単純な画像を動的に描画する方法を理解することはできません。

例:BitMapオブジェクトを取得し、それをピクセル単位で描画しますか?シェイプドローラブルのいくつかを使用したいと思っていましたが、キャンバスにシェイプを描くことしかできないようです...どのようにしてこれらのシェイプのビットマップを表示するのですか?または、移動またはズームするたびに、私のビューの "onDraw"ルーチンで描画したい画像を動的に再描画する必要がありますか?

"完璧な"ソリューションは、ビューのonDrawメソッドで軸を描画するためにShapeDrawable(または線を描き、それらにラベルを付けるようなもの)を使用することだと思います。次に、ズームして移動することができるデータポイント/フィット曲線/等の予め生成された画像を重ね合わせる。これは、白をグラフ画像上のアルファに設定することで可能になるはずです。

PS:グラフの画像は、実際には/ change/viewにあるべきではありません。ズームだけでドラッグされているだけです。おそらく軸は実際には動きに伴って変化するでしょう。したがって、ビューに入る前(または直ちに)にグラフを事前に作成するのが最適です。しかし、私はスケーリングがベクタイメージでもうまく機能していることに気付きました。ビットマップではなく適切なものもあります。

私はいくつかの一般的なガイダンスを探しています。 BitMap、ShapeDrawable、Drawableなどのクラスで読んでみると、ちょうど良いフィット感を見つけることができません。それは私が間違った木を吠えていると思うし、もう少し経験のある人が私に正しい方向を向けることができます。うまくいけば私は昨日まとめたズーム可能なビューを構築する時間を無駄にしなかった。

答えて

3

まず、何かを学んだらコードを書くのは時間の無駄ではありません。 :-)

Androidでベクター画像を描画することは残念ながらまだサポートされていません。ビットマップはあなたが得るものです。

あなたが欠けているのは、ビットマップで描画したいときはいつでもキャンバスを作成できるということです。あなたはonDrawがあなたにそれを与えるのを待つ必要はありません。

だから(onCreateからデータが変更されたときなど)、いつでもどこでも自分の好きなサイズのビットマップを作成できます。ここで

は、いくつかの擬似コード(テストしていない)ビットを助け

Bitmap mGraph; 

void init() { 
    // look at Bitmap.Config to determine config type 
    mGraph = new Bitmap(width, height, config); 
    Canvas c = new Canvas(mybits); 
    // use Canvas draw routines to draw your graph 
} 

// Then in onDraw you can draw to the on screen Canvas from your bitmap. 
protected void onDraw(Canvas canvas) { 
    Rect dstRect = new Rect(0,0,viewWidth, viewHeight); 
    Rect sourceRect = new Rect(); 
    // do something creative here to pick the source rect from your graph bitmap 
    // based on zoom and pan 
    sourceRect.set(10,10,100,100); 

    // draw to the screen 
    canvas.drawBitmap(mGraph, sourceRect, dstRect, graphPaint); 
} 

希望です。

+0

ウェイクール。それはちょうど私が行方不明だったステップです。これを使用して、基になるデータからBitmapDrawableを作成し、それをdrawableとして私のtouchzoomビューに渡すクラスを取得しました。 – AndyMac

関連する問題