我创建了这个类,它扩展了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>
我希望我的画布适合我的相对布局高度和宽度,图形应该在该区域中可见。目前它显示的是视图,但只是它的一部分。图形根本不可见..请帮我计算我需要做..
答案 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