2012-09-28 67 views
0

我已經創建了此類,它擴展了View並在Canvas中繪製了一個圖形。在繪製圖形時,我正在考慮實際的屏幕高度和寬度,並根據此繪製圖形。Android:如何縮放畫布以適合所需的尺寸

我的問題是我使用這個視圖作爲一個小窗口在另一個活動與所需的大小說100 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> 

我想適合我的畫布與我相對佈局的高度和寬度和圖形應可見在那個領域..目前它顯示的視圖,但只有一部分..圖形是不可見的..請幫助我計算我需要做..

回答

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軸上都有刻度指示器。使用設備屏幕分辨率,圖形大小和DPI計數,updateIncrements()是我找出每個X和Y表示多少像素。

使用這種方法,畫布將是任何大小,你不關心。繪製時,只需使用x * x像素和y * y像素,即每個值的計算像素。

[編輯]嘗試閱讀本第一http://developer.android.com/training/custom-views/custom-drawing.html

+0

所以,你的建議是,我應該將此代碼粘貼到類(代碼我上面顯示),延伸視野和方法的onDraw繪製圖形? –

+0

我其實不知道在哪裏應用這種方法? –

+0

那麼,不要複製/粘貼,而是在您的View類中重寫您的onSizeChanged方法,並使用相同的技巧。 – Simon

相關問題