Как нарисовать собственный фон

Мне нужно создать треугольник и отобразить внутри него текст под углом 45 градусов, ниже которого я должен поместить текстовый вид за пределы треугольника, чтобы отобразить другой текст. Это как баннер. Однако, когда я использую относительный макет и помещаю треугольный фон, он по-прежнему действует как прямоугольник, скрывая мое текстовое представление. Ниже приведен код, который я использую:

<RelativeLayout android:id="@+id/relative" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:background="@drawable/image_sticker" > <com.example.AngledTextView android:id="@+id/textViewx" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:rotation="52" android:textColor="#FFFFFF" /> </RelativeLayout> 

Мой класс AngledTextView:

 public class AngledTextView extends TextView { private int mWidth; private int mHeight; public AngledTextView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { canvas.save(); /*Paint textPaint = new Paint(); int xPos = (canvas.getWidth() / 2); int yPos = (int) ((canvas.getHeight() / 2) - ((textPaint.descent() + textPaint.ascent()) / 2)) ; canvas.rotate(45, xPos,yPos); */ super.onDraw(canvas); canvas.restore(); } } 

Проблема: Введите описание изображения здесь

Любые подсказки или ссылки на предлагаемые учебники будут высоко оценены 🙂

Прежде чем делать какой-либо рисунок, вы должны инициализировать и загрузить фигуры, которые вы планируете рисовать. Если структура (исходные координаты) фигур, которые вы используете в вашей программе, не изменяется во время выполнения, вы должны инициализировать их в методе onSurfaceCreated () вашего рендерера для обеспечения памяти и эффективности обработки.

 public void onSurfaceCreated(GL10 unused, EGLConfig config) { ... // initialize a triangle mTriangle = new Triangle(); // initialize a square mSquare = new Square(); } 

пример

 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.Point; import android.util.AttributeSet; import android.util.Log; import android.widget.LinearLayout; public class Slice extends LinearLayout { final static String TAG = "Slice"; Paint mPaint; Path mPath; public enum Direction { NORTH, SOUTH, EAST, WEST; } public Slice(Context context) { super(context); Create(context); } public Slice(Context context, AttributeSet attrs) { super(context, attrs); Create(context); } private void Create(Context context) { Log.i(TAG, "Creating ..."); mPaint = new Paint(); mPaint.setStyle(Style.FILL); mPaint.setColor(Color.RED); Point point = new Point(); point.x = 80; point.y = 80; mPath = Calculate(point, 70, Direction.SOUTH); } @Override protected void onDraw(Canvas canvas) { Log.i(TAG, "Drawing ..."); canvas.drawPath(mPath, mPaint); } private Path Calculate(Point p1, int width, Direction direction) { Log.i(TAG, "Calculating ..."); Point p2 = null, p3 = null; if (direction == Direction.NORTH) { p2 = new Point(p1.x + width, p1.y); p3 = new Point(p1.x + (width / 2), p1.y - width); } else if (direction == Direction.SOUTH) { p2 = new Point(p1.x + width, p1.y); p3 = new Point(p1.x + (width / 2), p1.y + width); } else if (direction == Direction.EAST) { p2 = new Point(p1.x, p1.y + width); p3 = new Point(p1.x - width, p1.y + (width / 2)); } else if (direction == Direction.WEST) { p2 = new Point(p1.x, p1.y + width); p3 = new Point(p1.x + width, p1.y + (width / 2)); } Path path = new Path(); path.moveTo(p1.x, p1.y); path.lineTo(p2.x, p2.y); path.lineTo(p3.x, p3.y); return path; } } 

Недавно я сделал подобное. Вот несколько советов, которые я использовал:

  • Создайте класс customView.
  • Инициируйте по крайней мере одну Paint (полупрозрачную, заливку) и один путь по вашему методу init. Его следует вызывать от конструкторов.
  • В методе onDraw настройте путь. Например:

     mPath = new Path(); mPath.moveTo(.0f, this.getHeight()); mPath.lineTo(this.getWidth(), this.getHeight()); mPath.lineTo(this.getWidth(),0.25f*this.getHeight()); mPath.lineTo(.0f, .0f); mPath.lineTo(.0f, this.getHeight()); 
  • Это сделает путь похожим на трапецию. Просто настройте свои очки, чтобы сделать треугольник. Затем позвоните

     canvas.clipPath(mPath); canvas.drawPath(mPath,mPaint); 
  • С этими пунктами вы нарисуете свой треугольник. Вы можете передать String методу init и вызвать drawText, прежде чем рисовать путь:

     canvas.drawText(str, xTit, yTit, mPaintTit); 

Надеюсь, это поможет =)

У меня есть ссылка для фона треугольника, как показано ниже.

link1

link2

link3

Я надеюсь, что это будет полезно для вас

В вашем обычном текстовом режиме используйте поворот анимации.

  <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:rotation="45" android:text="@string/hello_world" /> 

Ваша реализация может унаследовать от Drawable и реализовать getTransparentRegion() Далее, используйте этот drawable как фон в представлении, которое нарисовано поверх вашего TextView (возможно, имея как FrameView внутри FrameView )