繁体   English   中英

如何为要在画布上绘制的形状充气?

[英]How do I inflate a shape to draw on a Canvas?

我在drawables目录中的xml文件中存储了一个形状。 我想在我的Canvas中使用它(我知道我可以在代码中定义形状,但是我试图弄清楚如何以更“ Androidy”的方式实现它)。

我对将形状显示在画布上的语法一无所知。 我应该尝试将其转换为Shape还是Drawable? 需要矩阵吗? 油漆? 等等

我不需要很多细节,只需要指出正确的方向即可:)

谢谢。

[编辑]我的Android XML形状如下所示:

    <?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<stroke android:width="3px" android:color="#583010"/>
    <solid android:color="#ffffff" />
    <corners android:bottomRightRadius="3px" android:bottomLeftRadius="3px"
android:topLeftRadius="3px" android:topRightRadius="3px"/>
</shape>

我假设一定有某种方法可以使这种膨胀变大,不是吗? [/编辑]

让我们将您的文件称为“ res / drawable / my_shape.xml”。 以下代码行将从XML填充my_shape.xml并将其内容绘制到Canvas上。 ImageView用于证明这可行。

Drawable shape = getResources().getDrawable(R.drawable.my_shape);
Bitmap bitmap = Bitmap.createBitmap( shape.getIntrinsicWidth(), shape.getIntrinsicHeight(), Config.ARGB_8888 );
Canvas canvas = new Canvas( bitmap );
shape.setBounds( 0, 0, canvas.getWidth(), canvas.getHeight() );
shape.draw( canvas );

ImageView imageView = (ImageView) findViewById(R.id.my_imageView);
imageView.setImageBitmap( bitmap );

确保这些代码行在onCreate中的setContentView之后执行。

为了消除尽可能多的混乱,这是my_shape.xml的功能示例:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thicknessRatio="1.9"
    android:useLevel="false" >

    <solid android:color="#DDAAAFFF" />

    <size
        android:height="10dp"
        android:width="10dp" />

    <stroke
        android:width="1dp"
        android:color="#AAAAAA" />

</shape>

定义如何? 像SVG一样? 您将需要编写自己的解析器,并将形状/路径转换为对Canvas.drawPath()/Rect()等的调用。您可以编写一个自定义视图,该视图知道如何绘制自身,等等。为此编写代码。 膨胀只是解析XML并创建对象图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM