如何在android里面用文本绘制多边形

时间:2016-08-12 11:34:40

标签: java android xml android-drawable

enter image description here

我需要在里面用文字绘制这样的视图。 图形的文字和颜色必须是可变的。 最好的方法是什么?

3 个答案:

答案 0 :(得分:0)

一旦你想要绘制动态图形,你就可以进入手绘领域了,或者使用一些第三方图书馆来完成这项工作。

幸运的是,自己做的很顺利。您可以使用Canvas对象绘制多边形,如本示例中的this SO post

Paint wallpaint = new Paint();
wallpaint.setColor(Color.GRAY);
wallpaint.setStyle(Style.FILL);

Path wallpath = new Path();
wallpath.reset(); // only needed when reusing this path for a new build
wallpath.moveTo(x[0], y[0]); // used for first point
wallpath.lineTo(x[1], y[1]);
wallpath.lineTo(x[2], y[2]);
wallpath.lineTo(x[3], y[3]);
wallpath.lineTo(x[0], y[0]); // there is a setLastPoint action but i found it not to work as expected

canvas.drawPath(wallpath, wallpaint);

有几种方法可以将Canvas附加到某个UI对象上,该对象将显示在屏幕上,主要是在文档Canvas and Drawables页面中描述的,例如

  1. 渲染为Bitmap,然后添加到ImageView
  2. 扩展UI小部件,例如View,并使用onDraw方法更新
  3. 要更改多边形,只需更改上方lineTo方法中的x和y点以及Paint中的颜色即可。如果您需要,请务必更新,如果您选择方法1,则可能需要手动重新渲染为Bitmap,如果您选择方法2,则可能需要invalidate上的View

    要使文字显示在多边形内部,您也可以使用drawText方法在Canvas上绘图,或者在TextView上方放置View布局XML。如果您希望文本严格位于多边形内部,您显然必须对放置以及可能的换行和截断进行一些计算。

    另请参阅Custom Drawing手册页。

答案 1 :(得分:0)

你可以使用这样的三角形图像来实现它:

 <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#FF2323"
    android:drawableLeft="@drawable/triangle"
    android:gravity="center"
    android:paddingRight="10dp"
    android:text="In Process"
    android:textColor="@android:color/white" />

[enter image description here] 这是图像。在方括号之间单击以保存它。你不能在白色背景上看到它,因为它本身是白色的。

如果要调整此图像的大小,可以按照以下活动设置图像:

textView.setCompoundDrawablesWithIntrinsicBounds(new BitmapDrawable(getResources(), getResizedBitmap(this, R.drawable.triangle, 64, 64)), null, null, null);

将64改为最适合你的。

这是调整大小的方法:

public static Bitmap getResizedBitmap(Context activity,int imgid,int width,int height) {
    Bitmap bMap = BitmapFactory.decodeResource(activity.getResources(),imgid);
    Bitmap bMapScaled = Bitmap.createScaledBitmap(bMap, width,height, true);
    return bMapScaled;
}

答案 2 :(得分:0)

创建选择器并在textview的背景中绘制

<!-- Colored rectangle-->
<item>
    <shape android:shape="rectangle">

        <size
            android:width="100dp"

            android:height="40dp" />
        <solid android:color="#FF0000" />
    </shape>

</item>

<!-- This rectangle for the left side -->
<!-- Its color should be the same as layout's background -->
<item
    android:right="100dp"
    android:left="-100dp"
    android:top="-100dp"
    android:bottom="-100dp">
    <rotate
        android:fromDegrees="-45">
        <shape android:shape="rectangle">

            <solid android:color="#ffffff" />
        </shape>
    </rotate>
</item>

<!-- This rectangle for the right side -->
<!-- Their color should be the same as layout's background -->
<item
    android:right="100dp"
    android:left="100dp"
    android:top="-100dp"
    android:bottom="-100dp">
    <rotate
        android:fromDegrees="45">

        <shape android:shape="rectangle">

            <solid android:color="#ffffff" />
        </shape>
    </rotate>
</item>