2013-05-14 258 views
3

我刚刚进入Android基本绘图。我从几个简单的形状开始,但我遇到了一些问题。我想在画布的中心画一个圆圈。我看了几个例子,但似乎无法使其工作。我认为这是因为我不太了解变量在哪里。在画布中心绘制圆圈

有人可以请解释一下在我的屏幕中心绘制我的圈子的正确方法。这里是我的代码:

public class Circle extends View{ 

int width = this.getWidth(); 
int height = this.getHeight(); 

public Circle(Context context) { 
    super(context); 
    setFocusable(true); 

} 
protected void onDraw(Canvas canvas){ 
    canvas.drawColor(Color.CYAN); 
    Paint paint = new Paint(); 
    paint.setStyle(Paint.Style.FILL); 
    //canvas.drawCircle(100, 100, 50, paint); 
    canvas.drawCircle(width/2, height/2, 100, paint); 

    Display disp = ((WindowManager)this.getContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

    float radius = 0;//Radius caused an error so I initialized this variable 

    canvas.drawCircle(disp.getWidth()/2, disp.getHeight()/2, radius, paint); 

} 

}

+2

我对android编程知之甚少,但我知道半径为0意味着你没有圈子。 http://en.wikipedia.org/wiki/Radius – Kevin

+0

好够了。谢谢。 – David

+0

[Draw Circle on touch]可能重复(http://stackoverflow.com/questions/11796357/draw-circle-on-touch) – bummi

回答

8

宽度和观点的高度都没有的时候的getWidth()和getHeight()调用尚未初始化,只是在的onDraw使用的getWidth()和getHeight() :

canvas.drawCircle(getWidth()/2, getHeight()/2, 100, paint); 

你也可以重写onSizeChanged并获取视图的宽度和高度。

PS:不要在onDraw中创建任何东西,在构造函数中创建绘画对象。

-1

有一些对我们非常有用的链接,我希望他们会为你和其他人工作。

  1. https://github.com/swapgo20/Android-Hand-Drawing
  2. https://github.com/codepath/android_guides/wiki/Basic-Painting-with-Views
  3. https://github.com/Korilakkuma/CanvasView

我希望上面的链接是在画布上绘制形状非常有用的。

我建议你使用第三个链接,并使用android的路径类(http://developer.android.com/reference/android/graphics/Path.html)来绘制形状。

0

公共无效画圆(Graphics2D的克,INT的x,INT Y,INT半径){

X = X-(半径/ 2);

y = y-(radius/2);

g.fillOval(x,y,radius,radius);

}

在此,x,y是要画出的圆画布的位置,你可以用运动听众找到它,如果你要设置的x,y位置动态地希望这将帮助你