Android:如何缩放画布以适合所需的大小

时间:2012-09-28 20:15:43

标签: android android-canvas

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

我的问题是我在另一个活动中使用此视图作为窗口小部件,所需的大小为100 x 150 ..但View类不会缩放自身,只显示剪切部分而不是图形。我知道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

    }

我正在使用此视图的布局

    <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>

我希望我的画布适合我的相对布局高度和宽度,图形应该在该区域中可见。目前它显示的是视图,但只是它的一部分。图形根本不可见..请帮我计算我需要做..

1 个答案:

答案 0 :(得分: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