如何在Android自定义画布中绘制圆形?

如何在Android自定义画布中绘制圆形?,android,android-canvas,android-drawable,Android,Android Canvas,Android Drawable,我想在我的应用程序中允许用户画圆圈。绘图非常简单-用户只需按画布上的某个位置,然后按预定义的圆圈 这里最困难的部分是用一些可绘制的(图片)来填充它。当它是矩形时,它是非常简单的。然后你只需要写: Drawable drawable = getResources().getDrawable(R.drawable.my_background_picture); drawable.setBounds(myRectangle); drawable.draw(myCanvas); 一切

我想在我的应用程序中允许用户画圆圈。绘图非常简单-用户只需按画布上的某个位置,然后按预定义的圆圈

这里最困难的部分是用一些可绘制的(图片)来填充它。当它是矩形时,它是非常简单的。然后你只需要写:

   Drawable drawable = getResources().getDrawable(R.drawable.my_background_picture);
   drawable.setBounds(myRectangle);
   drawable.draw(myCanvas);
一切都是在我的自定义视图的
onDraw()方法上完成的

不幸的是,并没有这么简单的方法使它与圆圈。我发现的一个是轻微的修改,来自:

乍一看还可以,但事实并非如此。这个命令就像下面图片上的边框一样,所以你们可以在图片上移动空心圆,就这样。与矩形不同,在矩形中实际移动矩形位图


所以,我的问题是-有没有一种方法可以使圆形可绘制,并且可以移动/调整大小?

为什么要使圆形可绘制?可以通过canvas.drawCircle命令轻松绘制圆。也可以通过路径对象轻松创建一个

编辑:


如果你需要一个可绘制的,试着在椭圆形的基础上制作一个可绘制的形状。

为什么要制作一个可绘制的?可以通过canvas.drawCircle命令轻松绘制圆。也可以通过路径对象轻松创建一个

编辑:


如果你需要一个可绘制的,试着根据椭圆形制作一个可绘制的形状。

因为我需要的背景不是颜色,而是位图。如果你对此有任何解决方案,我会很高兴。你可以随时动态制作位图。创建一个正确大小的位图,为它创建一个画布,然后在画布上绘制,它将绘制到该位图。然后使位图可绘制。这可能是一个更好的方法,但我马上想到了。事实上,一个更好的主意——用一个椭圆形来制作一个可变形的形状。一个圆只是一个具有两个等长轴的椭圆的特例。根据你的解决方案,我应该制作一个圆位图,然后把它放在可绘制的矩形中,所以毕竟我会得到一些难看的东西?正如您在
setBounds()
中所看到的,您在代码中定义了图形的大小,但在您的解决方案中,所有内容都必须在编码之前定义,并且现在有可能更改其大小,因此它不适用于我的。因为我需要创建的背景不是颜色,而是位图。如果你对此有任何解决方案,我会很高兴。你可以随时动态制作位图。创建一个正确大小的位图,为它创建一个画布,然后在画布上绘制,它将绘制到该位图。然后使位图可绘制。这可能是一个更好的方法,但我马上想到了。事实上,一个更好的主意——用一个椭圆形来制作一个可变形的形状。一个圆只是一个具有两个等长轴的椭圆的特例。根据你的解决方案,我应该制作一个圆位图,然后把它放在可绘制的矩形中,所以毕竟我会得到一些难看的东西?正如您可能在
setBounds()
中看到的,您在图的代码大小中定义了,但在您的解决方案中,所有内容都必须在编码之前定义,现在可以更改其大小,所以这不适合我。
    InputStream resource = getResources().openRawResource(R.drawable.sand);
    Bitmap bitmap = BitmapFactory.decodeStream(resource);

    BitmapShader shader;
    shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP,Shader.TileMode.CLAMP);
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setShader(shader);

    myCanvas.drawRoundRect(myRectangle, 120, 120, paint);