我一直在扩展标准范围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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是Drawable使用这个类完全用XML 创建资源.这可能吗?
我知道使用其中一个标准形状只需通过以下示例实现,其中<shape>元素表示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>
Run Code Online (Sandbox Code Playgroud)
我无法看到的是,如何在XML中传递一个自定义Shape类,这个类ShapeDrawable是用XML定义的.我知道该android:shape属性只是传递一个枚举值,它只能是矩形,椭圆形,直线或环形.似乎没有XML属性来指定自定义Shape类.
但是,ShapeDrawable有一个setShape()方法,似乎建议我可以以编程方式设置我的自定义Shape类,但不能通过XML.
如果可能的话,我如何Shape在XML中使用自定义类?我意识到我可以View很容易地创建一个自定义来绘制我的基本形状,但是使用它Drawables似乎具有能够指定颜色等的优点以及XML或样式/主题中的其他属性.
自定义绘图无法从 xml 引用,但您可以轻松创建可在布局中使用的子类。
package com.example;
import android.content.Context;
import android.graphics.Canvas;
import android.text.Layout;
import android.util.AttributeSet;
import android.view.View;
public class TextView extends android.view.TextView {
public TextView(Context context, AttributeSet attrs) {
super(context, attrs);
setBackground(new MyCustomDrawable());
}
}
Run Code Online (Sandbox Code Playgroud)
并在layout.xml中使用它
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="my textview with custom drawable as background"
/>
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
通过使用这个技巧,您不仅可以使用自定义可绘制对象设置背景,还可以设置复合可绘制对象(它的类派生自 TextView/Button)
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |