Android绘制三角形实现带小三角的PopupWindow

最近项目用到一个弹窗,上面带有小三角,如图:

 

Android绘制三角形实现带小三角的PopupWindow_第1张图片

实现原理:

Android绘制三角形实现带小三角的PopupWindow_第2张图片

通过继承View绘制,上代码:


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;


/**绘制三角形
 * Created by jiqunsoftpc10 on 2019/10/26.
 */

public class SharpView extends View {
    private int mWidth =0; //三角形的宽度
    private int mHeight =0; //三角形的高度
    private Context mContext;

    public SharpView(Context context) {
        super(context);
        this.mContext=context;
        initView();
    }

    public SharpView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.mContext=context;
        initView();
    }

    private void initView() {
        mWidth = DensityUtils.dip2px(mContext,10);
        mHeight = DensityUtils.dip2px(mContext,6);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(mWidth,mHeight);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //创建画笔
        Paint paint = new Paint();
        paint.setColor(Color.parseColor("#292929"));
        paint.setAntiAlias(true); //抗锯齿
        paint.setStyle(Paint.Style.FILL);//实线
        //创建路径
        Path path = new Path();
        path.moveTo(0,mHeight);
        path.lineTo(mWidth,mHeight);
        path.lineTo(mWidth/2,0);
        path.close();//闭合路径
        //画在画布上
        canvas.drawPath(path,paint);
    }
}

 

 由于项目中三角形用到的地方不多,所以不打算自定义属性了,你可以根据自己的需求进行扩展。绘制完就直接在xml布局中使用,下面再接一个弹窗的内容布局就完成了。

//三角形   
 

//弹窗内容布局

 

你可能感兴趣的:(Android)