Rozszerzałem standardowy zakres klas Shape
(RectShape
, OvalShape
itd.), Rozszerzając klasę Shape
, aby utworzyć własny niestandardowy zestaw kształtów. Na przykład, stworzyliśmy prosty TriangleShape
klasy, tak jak poniżej:Odwoływanie się do niestandardowej klasy Shape w XML
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);
}
}
Co chciałbym zrobić, to stworzyć Drawable
zasobu całkowicie w XML przy użyciu tej klasy. czy to możliwe?
Zdaję sobie sprawę, że za pomocą jednego ze standardowych kształtach jest po prostu osiągnąć poprzez następujący przykład, gdzie element <shape>
reprezentuje 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>
Co nie mogę zobaczyć, to jak można by przekazać w formacie XML , niestandardowa klasa Shape
do tego ShapeDrawable
, która jest zdefiniowana w XML. Rozumiem, że atrybut android:shape
po prostu przekazuje wartość wyliczenia, która może być tylko prostokątem, owalem, linią lub pierścieniem. Wygląda na to, że nie ma atrybutu XML określającego niestandardową klasę Shape
.
Jednak ShapeDrawable
ma metodę setShape()
, która wydaje się sugerować, że mogę programowo ustawić moją niestandardową klasę Shape
, ale nie zrobię tego za pomocą XML.
Jak w miarę możliwości mogę skorzystać z niestandardowej klasy Shape
w XML? Zdaję sobie sprawę, że mogę bardzo łatwo stworzyć niestandardowe View
, aby narysować moje podstawowe kształty, ale użycie Drawables
wydaje się mieć tę zaletę, że można określać kolory, itp. I inne atrybuty w XML lub style/motywy.
jakiekolwiek aktualizacje w tej sprawie? –
@ M.ES W końcu po prostu zrobiłem to programowo. Doszedłem do wniosku, że to, co można zrobić za pomocą XML, jest celowo ograniczone i oferuje tylko podzbiór tego, co można zrobić za pomocą wywołań metod. – Trevor
Tak, ja 2 :) Thx! –