2012-09-28 4 views
0

View를 확장하고 Canvas에서 그래프를 그린이 클래스를 만들었습니다. 그래프를 그리는 동안 실제 화면 높이와 너비를 고려하고 그에 따라 그래프를 그립니다.Android : 원하는 크기로 캔버스 크기를 조정하는 방법

내 문제는 원하는 크기의 다른 활동에서 위젯으로이보기를 사용하고 있는데,보기 클래스가 자체 크기를 조정하지 않고 그래프가 아닌 부분 만 잘라내는 것을 보여줍니다. 나는이 캔버스를 원하는 크기에 맞추기 위해 약간의 계산을해야한다는 것을 알고 있지만 어떻게해야하는지 전혀 모른다. 어떤 도움이 좋을지 !! 내가 그래프 그리기입니다

코드 내가

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

나는 내 상대 레이아웃의 높이와 너비와 그래프해야 볼 수 내 캔버스에 맞게 원하는이보기를 사용하고

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 레이아웃입니다 해당 영역에 현재보기가 표시되지만 일부만 .. 그래픽이 전혀 표시되지 않습니다 .. 계산에 도움이 필요합니다. 할일이 필요합니다.

답변

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 * x 픽셀과 y * y 픽셀 만 사용하면됩니다.

[편집] 읽어보십시오이 첫 번째 http://developer.android.com/training/custom-views/custom-drawing.html

+0

따라서, 귀하의 제안은 내가 (코드는 내가 위에서 보여)보기를 확장 된 onDraw 방법에 그래프를 그립니다 내 클래스에이 코드를 붙여해야한다는 것입니다? –

+0

나는이 방법을 적용 할 곳을 실제로 모른다. –

+0

글쎄, 복사/붙여 넣기는 아니지만 View 클래스에서 onSizeChanged 메서드를 재정의하고 동일한 기술을 사용하십시오. – Simon

관련 문제