更新:已添加更新。请进一步检查。
我正在尝试使用我的文本视图(红色部分)来实现类似的功能:
这是为了获得这样的布局:
我继承了TextView并在阅读了一些关于Views如何绘制自己的内容之后添加了一些代码,但是我无法获得所需的结果。
从我的代码中,文本在后台进行,而drawable覆盖它
我也使用了ShapeDrawable
和PathShape
我能得到的是:
更新: @ malimo的建议解决了形状背后的文字问题,但问题仍然存在。
我可以使用9补丁解决方案或者可以绘制一个位图来掩盖事物,但整个布局将放在一个滚动条中,而在较小的屏幕上,可能会滚动。
背景是渐变,不滚动。因此,当使用蒙版滚动内容时,差异将被清晰地突出显示,这是我不希望发生的事情。
是否有一个选项,我可以决定视图绘制的整个形状,并使其成为路径而不是矩形?
视图是否允许我编辑矩形的绘制方式?
如果仔细观察,在任何文本视图的右侧,边框不是直线,而是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>
我哪里错了?
或者有更好的方法来解决这个问题吗?
任何帮助都将不胜感激。
答案 0 :(得分:2)
只需使用9补丁png(developer.android.com/tools/help/draw9patch.html)作为textView的背景绘图,您就应该能够达到预期效果......
(如果您真的想坚持自己的方法,请在调用'shapeDrawable.draw(canvas);')之后调用'super.onDraw(canvas);'
问候