在TextView Android中显示进度

在TextView Android中显示进度,android,graphics,textview,progress,Android,Graphics,Textview,Progress,嗨,我必须展示数字本身的进展。我遇到过着色器,TextView中用于文本水平多色的渐变。他们是否有任何内置API来绘制下图中的角色 提前感谢您可以在完全相同的位置创建两个文本视图,一个白色,一个绿色。设置其中一个的高度,以便文本被剪裁,并且仅部分覆盖另一个 <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" androi

嗨,我必须展示数字本身的进展。我遇到过着色器,TextView中用于文本水平多色的渐变。他们是否有任何内置API来绘制下图中的角色


提前感谢

您可以在完全相同的位置创建两个文本视图,一个白色,一个绿色。设置其中一个的高度,以便文本被剪裁,并且仅部分覆盖另一个

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#990000" >

<TextView
    android:id="@+id/text_green"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="58dp"
    android:layout_y="77dp"
    android:text="50"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#009900"
    android:textSize="100sp" />

<TextView
    android:id="@+id/text_white"
    android:layout_width="wrap_content"
    android:layout_height="60dp"
    android:layout_x="58dp"
    android:layout_y="77dp"
    android:text="50"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#FFFFFF"
    android:textSize="100sp" />

</AbsoluteLayout>

您可以在完全相同的位置创建两个文本视图,一个白色,一个绿色。设置其中一个的高度,以便文本被剪裁,并且仅部分覆盖另一个

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#990000" >

<TextView
    android:id="@+id/text_green"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="58dp"
    android:layout_y="77dp"
    android:text="50"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#009900"
    android:textSize="100sp" />

<TextView
    android:id="@+id/text_white"
    android:layout_width="wrap_content"
    android:layout_height="60dp"
    android:layout_x="58dp"
    android:layout_y="77dp"
    android:text="50"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#FFFFFF"
    android:textSize="100sp" />

</AbsoluteLayout>

使用下面的代码生成渐变

int[] color = {Color.DKGRAY,Color.CYAN};
float[] position = {0, 1};
TileMode tile_mode = TileMode.REPEAT;
LinearGradient lin_grad = new LinearGradient(0, 0, 0, 35, color, position, tile_mode);
Shader shader_gradient = lin_grad;
your_text_view.getPaint().setShader(shader_gradient); //you can change the gradient colour in textview

使用下面的代码生成渐变

int[] color = {Color.DKGRAY,Color.CYAN};
float[] position = {0, 1};
TileMode tile_mode = TileMode.REPEAT;
LinearGradient lin_grad = new LinearGradient(0, 0, 0, 35, color, position, tile_mode);
Shader shader_gradient = lin_grad;
your_text_view.getPaint().setShader(shader_gradient); //you can change the gradient colour in textview

如果我是你,我会创建自己的视图类,在
onDraw()
中,使用
StaticLayout
呈现白色文本,然后在画布上设置一个
PorterDuffXferMode
遮罩,以遮罩希望避免以绿色绘制的区域。保存图层,使用另一个
StaticLayout
以绿色渲染文本,然后使用遮罩还原图层,以获得精确的切割位置。

如果我是您,我将创建自己的视图类,在
onDraw()
中,使用
StaticLayout
渲染白色文本,然后在画布上设置一个
PorterDuffXferMode
遮罩,遮罩您希望避免以绿色绘制的区域。保存图层,使用另一个
StaticLayout
将文本呈现为绿色,然后使用遮罩恢复图层,以将其精确地切割到您想要的位置。

另一个可能的解决方案,改进Arun的答案是(未经测试,但应该可行):


另一个可能的解决方案是改进Arun的答案(未经测试,但应该有效):


谢谢但是我需要精确控制白色文本的高度!!我建议从这种类型的布局开始,然后编写java代码来更改白色TextView的高度。我尝试过,文本和布局顶部/底部之间的间距会妨碍计算。我怀疑您能否从TextView获得这种精度。您可以创建一个自定义视图,并将onDraw.Newbie替换为android图形。任何指向它的指针都很好。谢谢,谢谢!但是我需要精确控制白色文本的高度!!我建议从这种类型的布局开始,然后编写java代码来更改白色TextView的高度。我尝试过,文本和布局顶部/底部之间的间距会妨碍计算。我怀疑您能否从TextView获得这种精度。您可以创建一个自定义视图,并将onDraw.Newbie替换为android图形。任何指向它的指针都很好。谢谢。我们在哪里控制高度?请解释一下,我们在哪里控制高度?请解释一下。