Tôi đã mở rộng phạm vi tiêu chuẩn của các lớp Shape
(RectShape
, OvalShape
và vv) bằng cách mở rộng lớp Shape
để tạo bộ hình dạng tùy chỉnh của riêng mình. Ví dụ, tôi đã tạo ra một TriangleShape
lớp đơn giản, như vậy:Tham chiếu một lớp Hình dạng tùy chỉnh trong 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);
}
}
Những gì tôi muốn làm là tạo một nguồn tài nguyên Drawable
hoàn toàn bằng XML sử dụng lớp này. Điều này có thể không?
Tôi biết rằng bằng một trong những hình dạng tiêu chuẩn chỉ đơn giản là đạt được bằng cách ví dụ sau đây, nơi mà các yếu tố <shape>
đại diện cho một 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>
Những gì tôi không thể nhìn thấy là như thế nào ai có thể vượt qua, trong XML , một lớp tùy chỉnh Shape
đến số ShapeDrawable
này đang được định nghĩa trong XML. Tôi hiểu rằng thuộc tính android:shape
chỉ đơn giản là chuyển một giá trị enum, chỉ có thể là hình chữ nhật, hình bầu dục, đường thẳng hoặc vòng. Dường như không có thuộc tính XML để chỉ định một lớp tùy chỉnh Shape
.
Tuy nhiên, ShapeDrawable
có phương thức setShape()
, dường như đề xuất tôi có thể lập trình lớp tùy chỉnh Shape
của mình, nhưng không thực hiện theo XML.
Làm cách nào, nếu có thể, tôi có thể sử dụng lớp học Shape
tùy chỉnh trong XML không? Tôi nhận ra rằng tôi có thể tạo một hình tùy chỉnh View
rất dễ dàng để vẽ các hình dạng cơ bản của mình, nhưng sử dụng Drawables
dường như có lợi thế là có thể chỉ định màu sắc, v.v và các thuộc tính khác trong XML hoặc kiểu/chủ đề.
mọi cập nhật về điều này? –
@ M.ES Cuối cùng tôi đã làm nó theo chương trình. Tôi đi đến kết luận rằng những gì có thể được thực hiện thông qua XML là cố ý hạn chế, và chỉ cung cấp một tập con của những gì có thể được thực hiện thông qua các cuộc gọi phương thức. – Trevor
Vâng, tôi 2 :) Thx! –