クラスを拡張して独自のカスタム シェイプ セットを作成することにより、クラスの標準範囲Shape
(RectShape
などOvalShape
) を拡張してきました。Shape
たとえば、次のTriangleShape
ような単純なクラスを作成しました。
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.shapes.Shape;
public class TriangleLeftShape extends Shape {
@Override
public void draw(Canvas canvas, Paint paint) {
Path path = new Path();
path.setLastPoint(0, getHeight()/2);
path.lineTo(getWidth(), getHeight());
path.lineTo(getWidth(), 0);
path.close();
canvas.drawPath(path, paint);
}
}
私がやりたいことは、Drawable
このクラスを使用して完全に XML でリソースを作成することです。これは可能ですか?
標準形状の 1 つを使用することは、<shape>
要素が a を表す次の例で簡単に実現できることを認識していますShapeDrawable
。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
<gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF"
android:angle="270"/>
</shape>
私が見ることができないのは、XMLで定義されているカスタムShape
クラスをXMLで渡す方法です。属性が単純に列挙値を渡しているShapeDrawable
ことを理解しています。これは、長方形、楕円形、線、またはリングのみです。カスタムクラスandroid:shape
を指定するXML属性がないようです。Shape
ただし、にShapeDrawable
はsetShape()
メソッドがあります。これは、カスタムShape
クラスをプログラムで設定できるが、XML 経由では設定できないことを示唆しているようです。
可能であれば、Shape
XML でカスタム クラスをどのように利用できますか? View
基本的な形状を描画するためのカスタムを非常に簡単に作成できることを認識していますが、を使用するDrawables
と、色などやその他の属性を XML またはスタイル/テーマで指定できるという利点があるようです。