如何修改/更改TextView具有的矩形,以及其他内容

时间:2013-09-20 15:33:45

标签: android android-view android-custom-view

更新:已添加更新。请进一步检查。

我正在尝试使用我的文本视图(红色部分)来实现类似的功能:

enter image description here

这是为了获得这样的布局:

enter image description here

我继承了TextView并在阅读了一些关于Views如何绘制自己的内容之后添加了一些代码,但是我无法获得所需的结果。

从我的代码中,文本在后台进行,而drawable覆盖它 我也使用了ShapeDrawablePathShape 我能得到的是:

enter image description here

更新: @ 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>

我哪里错了?
或者有更好的方法来解决这个问题吗?

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

只需使用9补丁png(developer.android.com/tools/help/draw9patch.html)作为textView的背景绘图,您就应该能够达到预期效果......

(如果您真的想坚持自己的方法,请在调用'shapeDrawable.draw(canvas);')之后调用'super.onDraw(canvas);'

问候