zoukankan      html  css  js  c++  java
  • 自己定义带三角形箭头的TextView

    <?xml version="1.0" encoding="utf-8"?

    >
    <resources>
         <declare-styleable name="ArrowTextView">
            <attr name="radius" format="dimension" />
            <attr name="arrowWidth" format="dimension" />
            <attr name="arrowInHeight" format="dimension" />
            <attr name="bg" format="color" />
        </declare-styleable>
    </resources>



    package com.example.sanjjiaoxing;



    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Path;
    import android.graphics.RectF;
    import android.util.AttributeSet;
    import android.util.TypedValue;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.TextView;


    /**
     * @author wuxif_000  带三角形箭头的(三角形在一定高度居中,超过该高度无论......),四角带圆角,
     *
     */
    public class ArrowTextView extends TextView {
    public ArrowTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    ini(context, attrs);
    }




    private void ini(Context context, AttributeSet attrs) {
    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ArrowTextView);
    radius=typedArray.getDimension(R.styleable.ArrowTextView_radius, 0);
    arrowWidth=typedArray.getDimension(R.styleable.ArrowTextView_arrowWidth, 0);
    arrowInHeight=typedArray.getDimension(R.styleable.ArrowTextView_arrowInHeight, 0);
    color=typedArray.getColor(R.styleable.ArrowTextView_bg, Color.RED);
    }



    public ArrowTextView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    ini(context, attrs);
    }




    public ArrowTextView(Context context) {
    super(context);
    }
    private float radius;
    private float   arrowWidth;
    /**
    * 三角形箭头在此高度居中......
    */
    private float  arrowInHeight;
    private int color;
    /**
    * @param arrowWidth  三角形箭头的宽度.......
    */
    public void setArrowWidth(float arrowWidth){
    this.arrowWidth=arrowWidth;
    invalidate();

    }
    /**
    * @param arrowInHeight   三角形箭头在此高度居中......
    */
    public void setArrowInHeight(float arrowInHeight){
    this.arrowInHeight=arrowInHeight;
    invalidate();
    }
    /**
    * @param radius  矩形四角圆角的半径..........
    */
    public void setRadius(float radius){
    this.radius=radius;
    invalidate();

    }
    /**
    * @param color   箭头矩形的背景色.........
    */
    public void setBgColor(int color){
    this.color=color;
    invalidate();

    }
    @Override
    protected void onDraw(Canvas canvas) {
    Paint paint=new Paint();
    paint.setColor(color==0?Color.RED:color);
    paint.setAntiAlias(true);
    if(radius==0){
    radius=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics());
    }
    if(arrowWidth==0){
    arrowWidth=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics());
    }
    //带圆角的矩形(左边减去三角形的宽度...........)
    int left = (int) (getPaddingLeft()-arrowWidth);
    int height=getHeight();
    canvas.drawRoundRect(new RectF(left, 0, getWidth(), height), radius, radius, paint);
    if(arrowInHeight==0){
    arrowInHeight = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());
    }
    height = (int) (height>arrowInHeight?

    arrowInHeight:height);
    //画三角形
    Path path=new Path();
    path.setFillType(Path.FillType.EVEN_ODD);
    float yMiddle = height/2;
    float yTop=yMiddle-(arrowWidth/2);
    float yBottom=yMiddle+(arrowWidth/2);
    path.moveTo(0, yMiddle);
    path.lineTo(left, yTop);
    path.lineTo(left, yBottom);
    path.lineTo(0, yMiddle);
    path.close();
    canvas.drawPath(path, paint);
    // canvas.restore();
    // canvas.translate(left, 0);
    super.onDraw(canvas);

    }


    }

    //使用方法

     <com.example.sanjjiaoxing.ArrowTextView
            android:id="@+id/arrowText"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/textView1"
            android:layout_marginTop="63dp"
            android:paddingBottom="10dp"
            android:paddingLeft="15dp"
            android:paddingRight="10dp"
            android:paddingTop="10dp"
            android:text="qqqqqqqqqqqqddddddsdfsfdfdfddddfdsfdfdfdfdfdfdfdfdddddddddddddddddqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq"
            wuxifu:bg="@color/green"
            wuxifu:radius="10dp" />





  • 相关阅读:
    linux系统性能监控常用命令
    如何在windows的DOS窗口中正常显示中文(UTF-8字符)
    在Windows的CMD中如何设置支持UTF8编码?
    设置cmd的codepage的方法
    Oracle字符集转换
    移动端跨平台开发的深度解析
    类型擦除是抽象泛型的实例化的过程
    FP又称为Monadic Programming
    深入剖析Swift性能优化
    真实世界中的 Swift 性能优化
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/6718078.html
Copyright © 2011-2022 走看看