クラスを拡張して独自のカスタム シェイプ セットを作成することにより、クラスの標準範囲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 経由では設定できないことを示唆しているようです。
可能であれば、ShapeXML でカスタム クラスをどのように利用できますか? View基本的な形状を描画するためのカスタムを非常に簡単に作成できることを認識していますが、を使用するDrawablesと、色などやその他の属性を XML またはスタイル/テーマで指定できるという利点があるようです。