添加一个图像作为textview的文字背景

最近我想用我的新项目做一些艺术性的事情,就像标题所暗示的那样,将背景图像添加为文本的背景,而不是四周的典型颜色。 具体来说,我有这个文本的渐变图像。

像这样的东西

在这里输入图像说明

通常我会期望一个XML可绘制的资源文件types的解决scheme,但任何简单的解决scheme,不胜感激

编辑:

感谢所有的着色器解决scheme,但为了这个问题,只有提供解决scheme的图像背景的答案将被接受/给予赏金

Solutions Collecting From Web of "添加一个图像作为textview的文字背景"

您可以将BitmapShader应用于TextView涂料。

 myTextView.getPaint().setShader(new BitmapShader(myBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); 

如果您不想使用图像,还有其他types的着色器。 文档在这里 。

着色器是在绘制过程中返回水平跨度颜色的对象的基础类。 Shader的一个子类被安装在调用paint.setShader(着色器)的Paint中 。 之后,用该绘画绘制的任何对象(除位图之外)将从着色器中获取它的颜色。

  Bitmap bitmapObj = BitmapFactory.decodeResource(getResources(),R.drawable.your_image); Shader shaderObj = new BitmapShader(bitmapObj,Shader.TileMode.REPEAT,Shader.TileMode.REPEAT); textViewObj.getPaint().setShader(shaderObj); textViewObj.setText("hello"); 

你应该调用正确的Shader.TileMode

你也可以按照

  1. 渐变TextView
  2. Textview渐变文本

你可以使用yourTextView.getPaint().setShader(new LinearGradient(...));

LinearGradient有两个构造函数:

 /** Create a shader that draws a linear gradient along a line. @param x0 The x-coordinate for the start of the gradient line @param y0 The y-coordinate for the start of the gradient line @param x1 The x-coordinate for the end of the gradient line @param y1 The y-coordinate for the end of the gradient line @param colors The colors to be distributed along the gradient line @param positions May be null. The relative positions [0..1] of each corresponding color in the colors array. If this is null, the the colors are distributed evenly along the gradient line. @param tile The Shader tiling mode */ public LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[], TileMode tile) 

 /** Create a shader that draws a linear gradient along a line. @param x0 The x-coordinate for the start of the gradient line @param y0 The y-coordinate for the start of the gradient line @param x1 The x-coordinate for the end of the gradient line @param y1 The y-coordinate for the end of the gradient line @param color0 The color at the start of the gradient line. @param color1 The color at the end of the gradient line. @param tile The Shader tiling mode */ public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, TileMode tile) 

着色器的文档:

https://developer.android.com/reference/android/graphics/Shader.html

Shaders.TileMode的文档:

https://developer.android.com/reference/android/graphics/Shader.TileMode.html


另一种方式(如想法和未testing):

将文本转换为位图并绘制,然后使用GradientDrawable

在drawable文件夹中创buildgradient.xml。 您可以设置angular度和开始和结束颜色。 设置这个drawable作为背景

  <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="#FFFFFF" android:endColor="#00000000" android:angle="45"/> </shape> 

而不是通过使用上面的答案build议的着色器和东西给GPU /系统加载,将build议您使用相对布局。

 <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/your_imageview_id" android:layout_width="fill_parent" android:layout_height="As_you_want_dp" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:scaleType="fitXY" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/your_textview_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginTop="20dp" android:layout_centerHorizontal="true" /> </RelativeLayout>