将图片添加为textview的文字背景

时间:2017-01-05 00:31:11

标签: java android xml

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

像这样的东西

enter image description here

通常我会期望一个xml可绘制资源文件类型解决方案,但是非常感谢任何简单的解决方案

编辑:

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

5 个答案:

答案 0 :(得分:6)

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

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

如果您不想使用图像,还有其他类型的着色器。文档为here

答案 1 :(得分:5)

Shader 是在绘图过程中返回水平颜色范围的对象的基类。 Shader的子类安装在Paint中,调用paint.setShader(着色器) 。之后,使用该绘制绘制的任何对象(位图除外)都将从着色器中获取其颜色。

        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. Gradient TextView
  2. Textview Gradient Text

答案 2 :(得分:1)

您可以使用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

另一种方式(作为想法而未经测试):

将文本转换为位图和drawable,然后使用GradientDrawable

答案 3 :(得分:1)

在drawable文件夹中创建gradient.xml。您可以设置角度以及开始和结束颜色。将此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>

答案 4 :(得分:0)

不是通过使用上面的答案建议的着色器和东西来给gpu /系统加载,而是建议你使用相对布局。

<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>