Android中的平行四边形TextView

lba*_*ggi 0 android canvas textview

我正在尝试创建一个平行四边形形状的文本视图,其中包含一些文本(根据从服务器检索到的一些结果,该文本必须是动态的)。到现在draw(Canvas canvas)为止,我扩展了TextView类的实现方法,结果变成了绘制形状,但是当我在xml中添加textView并尝试添加一些文本时,simpy文本不会出现。

这是我的自定义视图:

public class ParallelogramTextView extends TextView {

   Paint mInnerPaint;

   public ParallelogramTextView(Context context) {
       super(context);
       init();
   }

   public ParallelogramTextView(Context context, AttributeSet attrs, int defStyle) {
       super(context, attrs, defStyle);
       init();
   }

   public ParallelogramTextView(Context context, AttributeSet attrs) {
       super(context, attrs);
       init();
   }


   private void init() {
       mInnerPaint = new Paint();
       mInnerPaint.setAntiAlias(true);
       mInnerPaint.setColor(Color.RED);
       mInnerPaint.setStyle(Paint.Style.FILL);
       mInnerPaint.setTextSize(20f);
   }


   @Override
   public void draw(Canvas canvas) {
       super.draw(canvas);
       Path path = new Path();
       path.moveTo(getWidth(),0);
       path.lineTo(getWidth()/10, 0);
       path.lineTo(0, getHeight());
       path.lineTo(getWidth() - (getWidth()/10),getHeight());
       path.lineTo(getWidth(), 0);
       canvas.drawPath(path, mInnerPaint);
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我的xml:

<ParallelogramTextView
    android:layout_width="200dp"
    android:layout_height="40dp"
    android:layout_gravity="center"
    android:text="Test"
    android:gravity="center"
    android:textColor="@color/colorPrimary"
    android:id="@+id/parallelogramTextView" />
Run Code Online (Sandbox Code Playgroud)

我不明白为什么文字没有显示。有人可以帮我吗?提前致谢

lba*_*ggi 5

我找到了一种彻底改变解决方案的方法,我使用Vector创建了一个表示平行四边形形状的drawable ,并将其用作法线的背景。不知道这是否是最佳做法,但对我有用。TextView

这是drawable的代码:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
  android:width="200dp"
  android:height="50dp"
  android:viewportWidth="200"
  android:viewportHeight="50">

  <path android:fillColor="@android:color/holo_red_dark"
      android:pathData="M 200 0 L 20 0 L 0 50 L 180 50 L 200 0" />

</vector>
Run Code Online (Sandbox Code Playgroud)