0

View を拡張し、Canvas でグラフを描画するこのクラスを作成しました。グラフを描いているときは、実際の画面の高さと幅を考慮しており、それに応じてグラフを描いています。

私の問題は、この View を別のアクティビティのウィジェットとして 100 x 150 などの目的のサイズで使用していることです..しかし、View クラスはそれ自体をスケーリングせず、グラフではなくクリップされた部分のみを表示します。このキャンバスを目的のサイズに合わせるために計算を行う必要があることは知っていますが、その方法がわからない..どんな助けでも素晴らしいでしょう!!

グラフを描いているコードは

   public class GraphPlotting extends View
    {
    public void onDraw(Canvas canvas)
{

    readPoints();
    Paint paint1 = new Paint();
    paint1.setColor(Color.rgb(0xFF,0xFF, 0xFF));
    paint1.setStrokeWidth(1.0f);

    Paint paint2 = new Paint();
    paint2.setColor(Color.rgb(0xFF,0xFF, 0xFF));
    paint2.setStrokeWidth(10.0f);

    Paint paint = new Paint();
    paint.setStyle(Paint.Style.FILL);
    paint.setColor(Color.RED);
    canvas.drawPaint(paint);

    canvas.drawLines(p,paint1);


}
    public void readPoints()
    {
          DisplayMetrics dm = new DisplayMetrics();
      getWindowManager().getDefaultDisplay().getMetrics(dm);

          height = dm.heightPixels;
      width = dm.widthPixels;

           // drawing graph based on above dimension which in my case is 480 by 800

    }

このビューを使用しているxmlレイアウト

    <RelativeLayout
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:layout_below="@+id/btn_analyze"
android:layout_centerHorizontal="true"
android:id="@+id/rlgraph"
 >
<com.aventusoft.mylynel.GraphPlotting

        android:id="@+id/view1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"

 />
</RelativeLayout>

キャンバスに相対レイアウトの高さと幅を合わせたいのですが、その領域にグラフが表示されるはずです..現在、ビューが表示されていますが、その一部しか表示されていません..グラフはまったく表示されていません..計算を手伝ってください.行う..

4

1 に答える 1

0

ImageView を拡張してグラフを描画する独自のクラスの 1 つから直接コピーして貼り付けます。アイデアは、これを任意のレイアウトに配置できるということです。クラスは、独自の測定を処理します。

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {

    widgetHeight = h;
    widgetWidth = w;

    if (sizeChangedObservers != null && sizeChangedObservers.size() > 0) {
        for (SizeChangedObserver observer : sizeChangedObservers) {
            observer.callback(w, h);
        }
    }

    updateIncrements();

}

sizeChangedObservers を使用すると、グラフのサイズが変更された場合に他のクラスに通知できます。たとえば、X 軸と Y 軸にスケール インジケーターがあります。updateIncrements() は、デバイスの画面解像度、グラフ サイズ、および DPI カウントを使用して、X と Y がそれぞれ何ピクセルを表すかを計算する場所です。

このアプローチを使用すると、キャンバスはどんなサイズでも構いません。プロットするときは、値ごとに計算されたピクセルである x * xPixels と y * yPixels を使用するだけです。

[編集] 最初にこれを読んでみてくださいhttp://developer.android.com/training/custom-views/custom-drawing.html

于 2012-09-28T20:26:47.080 に答える