0

我创建了这个类,它扩展了 View 并在 Canvas 中绘制了一个图形。在绘制图表时,我正在考虑实际的屏幕高度和宽度,并据此绘制图表。

我的问题是我将此视图用作另一个活动中的小部件,所需大小为 100 x 150 ..但视图类不会自行缩放,只显示它的剪裁部分而不是图形。我知道 O 必须做一些计算才能使这个画布适合所需的大小,但我不知道如何做到这一点..任何帮助都会很棒!

我正在绘制图形的代码是

   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 以绘制图形。这个想法是你可以把它放到任何布局中。班级负责自己的测量。

@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 回答