如何绘制自定义背景

Use*_*er3 4 android android-layout android-xml

我必须设计一个三角形并在其中显示一些角度为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>
Run Code Online (Sandbox Code Playgroud)

我的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();  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

问题: 在此输入图像描述

任何有关建议教程的提示或链接都将受到高度赞赏:)

Luc*_*uez 6

我最近做过类似的事情.以下是我使用过的一些提示:

  • 创建customView类.
  • 在init方法上初始化至少一个Paint(半透明,填充)和一个Path.它应该从构造函数中调用.
  • 在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());
    
    Run Code Online (Sandbox Code Playgroud)
  • 这将使路径类似于梯形.只需自定义您的点即可制作三角形.然后打电话

    canvas.clipPath(mPath);
    canvas.drawPath(mPath,mPaint);
    
    Run Code Online (Sandbox Code Playgroud)
  • 通过这些点,您将绘制三角形.您可以将String传递给init方法并在绘制路径之前调用drawText:

    canvas.drawText(str, xTit, yTit, mPaintTit);
    
    Run Code Online (Sandbox Code Playgroud)

我希望这会有所帮助=)