【问题标题】:Android TextView with parallelogram background具有平行四边形背景的Android TextView
【发布时间】:2015-03-18 00:17:08
【问题描述】:

我想达到如下效果。即具有平行四边形背景的 TextView。

我不能使用 9-patch,因为背景颜色是动态的。

理想的情况是使用已设置背景的自定义 TextView。

有没有办法做到这一点?

【问题讨论】:

  • 你得到答案了吗?我遇到了同样的问题
  • 我刚刚以我能解释的最简单的方式添加了答案。希望这会有所帮助。
  • 这个问题用代码给出你的答案..stackoverflow.com/questions/29094070/…

标签: textview android-custom-view android-drawable android-bitmap android-background


【解决方案1】:

我最终不得不创建一个自定义视图,该视图使用绘制路径为左侧和右侧绘制了一个三角形。

然后我必须创建另一个自定义视图,它扩展了线性布局(或相对布局)并包括左三角形视图、文本视图和右三角形视图。三角形大小随视图的高度调整。并且三角形的填充颜色与文本视图的背景颜色相匹配。

这一切似乎都运行良好,因为我在许多设备上都没有遇到任何问题。它也是列表视图中列表项的一部分,性能看起来不错。

对于三角形:

公共类 LabelTriangleView 扩展视图 {

private boolean mRightSided = false;
private Paint mMainTrianglePaint;
private int mMainTriangleColor;

public LabelTriangleView(Context context) {
    super(context);
    intialise();
}

public LabelTriangleView(Context context, AttributeSet attrs) {
    super(context, attrs);
    intialise();
}

public void setMainColor(int newColor) {
    mMainTriangleColor = newColor;
    invalidate();
    requestLayout();
}

public void setRightSided() {
    mRightSided = true;
    invalidate();
    requestLayout();
}

@Override
protected void onDraw(Canvas canvas) {

    mMainTrianglePaint.setColor(mMainTriangleColor);

    if (mRightSided) {
        canvas.drawPath(getRightSidedPath(), mMainTrianglePaint);
    } else {
        canvas.drawPath(getLeftSidedPath(), mMainTrianglePaint);
    }
}

private void intialise() {
    mMainTrianglePaint = new Paint();
    mMainTrianglePaint.setStyle(Style.FILL);
    mMainTrianglePaint.setAntiAlias(true);
}

private Path getLeftSidedPath() {
    Path path = new Path();
    path.moveTo(this.getMeasuredWidth(), 0);
    path.lineTo(this.getMeasuredWidth(), this.getMeasuredHeight());
    path.lineTo(0, this.getMeasuredHeight());
    path.close();

    return path;
}

private Path getRightSidedPath() {
    Path path = new Path();
    path.moveTo(0, 0);
    path.lineTo(this.getMeasuredWidth(), 0);
    path.lineTo(0, this.getMeasuredHeight());
    path.close();

    return path;
}

}

三角形应该足以让任何人开始。我无法在此处发布其余代码,因为它太复杂而无法删除。

但本质上,这就是我所做的:

  1. 创建了一个自定义视图,它扩展了我称为 LabelView 的 RelativeLayout。
  2. 在初始化 LabelView 时,我添加了一个 TextView。
  3. 创建了两个新的自定义 LabelTriangleView。一个用于左侧,一个用于右侧(调用 setRightSided)。
  4. 我将两个 LabelTriangleView 的高度设置为 TextView 的相同高度。
  5. 我将两个 LabelTriangleView 的宽度设置为 TextView 高度的一半。
  6. 然后我添加了与 TextView 左侧对齐的 Left LabelTriangleView。
  7. 我添加了与TextView右侧对齐的右侧LabelTriangleView。
  8. 我使用 setMainColor() 设置了两个 LabelTriangleView 的颜色。并为TextView的bg使用相同的颜色

基本上就是这样!

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多