gpt4 book ai didi

android - 如何将 TextView 的矩形修改/更改为其他内容

转载 作者:行者123 更新时间:2023-11-29 21:33:21 24 4
gpt4 key购买 nike

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

我正在尝试通过我的 TextView (红色部分)实现类似的效果:

enter image description here

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

enter image description here

我将 TextView 子类化并在阅读了一些有关 View 如何绘制自身的内容后添加了一些代码,但我无法获得所需的结果。

在我的代码中,文本在后台,drawable 覆盖了它。
我也用过 ShapeDrawablePathShape
我能得到的是:

enter image description here

更新:@malimo 的建议解决了在形状后面绘制文本的问题,但问题仍然存在。
我可以使用 9-patch 解决方案或者可以绘制位图来掩盖事物,但是整个布局将放在滚动条中,并且在较小的屏幕上可能会滚动。
背景是渐变的,不滚动。因此,当使用蒙版滚动内容时,差异将被清楚地突出显示,这是我不想发生的事情。

是否有一个选项可以让我决定 View 将自身绘制成的整个形状,并使其成为路径而不是矩形?
View 是否允许我编辑矩形的绘制方式?

如果仔细观察,在任何 TextView 的右侧,边框都不是一条直线,而是一条 45 度斜线。我还希望斜线留下的其余区域是透明的,这样当它在渐变上方滚动时,看起来还不错。如果可行,我也会将其应用于其他 View (例如该按钮和 ImageView )。

我能否提供 TextView 的基类使用的矩形,然后修改该形状并将其返回绘制?

我使用的快速而肮脏的代码是这样的:

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>

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

如有任何帮助,我们将不胜感激。

最佳答案

只需使用 9 patch png (developer.android.com/tools/help/draw9patch.html) 作为 textView 的可绘制背景,您应该能够获得所需的结果...

(如果您真的想坚持您的方法,请尝试在调用“shapeDrawable.draw(canvas);”之后调用“super.onDraw(canvas);”)

问候

关于android - 如何将 TextView 的矩形修改/更改为其他内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18920583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com