更新:添加了更新。请进一步检查。
我试图用我的文本视图(红色部分)来实现这样的目标:
这是为了得到这样的布局:
在阅读了一些有关视图如何绘制自己的信息后,我将 TextView 子类化并添加了一些代码,但我无法获得所需的结果。
在我的代码中,文本位于背景中,并且可绘制对象覆盖了它。
我也ShapeDrawable
用过PathShape
。
我能得到的是:
更新: @malimo 的建议解决了在形状后面绘制文本的问题,但问题仍然存在。
我可以使用 9-patch 解决方案,或者可以绘制位图来掩盖事物,但整个布局将放在一个滚动条内,并且在较小的屏幕上,可能会滚动。
背景是渐变的,不会滚动。因此,当使用蒙版滚动内容时,差异将被清楚地突出显示,这是我不希望发生的事情。
是否有一个选项可以让我决定视图将自身绘制成的整个形状,并使其成为路径而不是矩形?
视图会让我编辑矩形的绘制方式吗?
如果仔细观察,在任何文本视图的右侧,边框都不是直线,而是 45 度斜线。我还希望斜线留下的其余区域是透明的,这样当它在渐变上方滚动时,它看起来还不错。如果可行,我也会将其应用于其他视图(例如该按钮和图像视图)。
是否可以向我提供 TextView 的 Base 类使用的矩形,并修改该形状并将其返回绘制?
我使用的快速而肮脏的代码是这样的:
public class CustomTextView extends TextView{
public CustomTextView(Context context, AttributeSet attribSet) {
super(context, attribSet);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Path path = new Path();
path.moveTo(20, 20);
path.lineTo(100,20);
path.lineTo(130, 70);
path.lineTo(20, 70);
path.lineTo(20, 20);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Style.FILL);
paint.setStrokeWidth(2);
PathShape pathShape = new PathShape(path,getWidth(),getHeight());
ShapeDrawable shapeDrawable = new ShapeDrawable(pathShape);
shapeDrawable.getPaint().set(paint);
shapeDrawable.setBounds(0, 0, getWidth(), getHeight());
shapeDrawable.draw(canvas);
}
}
我使用此代码的 XML 如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:custom="http://schemas.android.com/apk/res/com.example.customviewdemo"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="#FF99FF" >
<com.example.customviewdemo.CustomTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/customView"
android:text="Hello, World!" />
</RelativeLayout>
我哪里错了?
还是有更好的方法来解决这个问题?
任何帮助,将不胜感激。