1

解決方法がわからない問題があります。できれば助けてください。私のアプリでは、カスタムビュー拡張ビューを作成する必要があります。このビューでは、多くの長方形を描画する必要があり、canvas.drawRectまたはcanvas.drawRoundRectで作成します。それは明確だ。しかし、これらの長方形(グラデーション、コーナー、パディングなど)の複合デザインを作成し、これらの設定(グラデーション、コーナー、パディングなど)をXMLで実行したいと思います。どうすればいいですか?問題は、XMLで形状を決定することです。この描画可能オブジェクトは背景としてのみ使用できますが、長方形を描画するときに、長方形の背景を設定できません。たぶん、問題を解決する別の方法があります。XMLシェイプオブジェクトを背景としてだけでなく、x、y座標、幅、高さのビューオブジェクトを設定するために使用できますか?

編集:長方形を描くことができます:

canvas.drawRect(x1, y1, x2, y2, paint);

しかし、私は次のようなXMLの長方形設定を持っています:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

<!-- Specify a gradient for the background -->
    <gradient
    android:angle="90"
    android:startColor="#55000066"
    android:centerColor="#FFFFFF"
    android:endColor="#55000066" />

<!-- Specify a dark blue border -->
    <stroke 
    android:width="2dp"
    android:color="#000066" />

<!-- Specify the margins that all content inside the drawable must adhere to -->
    <padding
    android:left="5dp"
    android:right="5dp"
    android:top="5dp"
    android:bottom="5dp" />

<corners
    android:topLeftRadius="10dp"
    android:topRightRadius="10dp"
    android:bottomLeftRadius="10dp"
    android:bottomRightRadius="10dp" />
</shape>

この設定を長方形に適用したいと思います。どのように?

4

1 に答える 1

6

次のように、コードからXMLで定義されたドローアブルをロードして使用できます。

public class CustomView extends View {

    Drawable shape;

    public CustomView(Context context) {
        super(context);
        shape = context.getResources().getDrawable(R.drawable.shape);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        shape.setBounds(left, top, right, bottom);
        shape.draw(canvas)
    }

    // ... Additional methods omitted for brevity

}
于 2012-10-10T14:39:59.263 に答える