<?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" />

自己定义带三角形箭头的TextView的更多相关文章

  1. 如何重载ComboBox 使其下拉按钮(带下箭头的)和下拉列表的垂直滚动条的宽度改变?(自绘ComboBox) [转]

    原文地址:http://bbs.csdn.net/topics/390135022 http://blog.csdn.net/scsdn/article/details/4363299 想使用winf ...

  2. 纯Css绘制三角形箭头三种方法

    在制作网页的过程中少不了绘制类似图片的三角形箭头效果,虽然工程量不大,但是确实麻烦.在学习的过程中,总结了以下三种方法,以及相关的例子. 一.三种绘制三角形箭头方法 1.方法一:利用overflow: ...

  3. WPF进阶教程 - 使用Decorator自定义带三角形的边框

    原文:WPF进阶教程 - 使用Decorator自定义带三角形的边框 写下来,备忘. Decorator,有装饰器.装饰品的意思,很容易让人联想到设计模式里面的装饰器模式.Decorator类负责包装 ...

  4. 纯CCS绘制三角形箭头图案

    用CSS绘制三角形箭头.使用纯CSS,你只需要很少的代码就可以创作出各种浏览器都兼容的三角形箭头! CSS代码: /* create an arrow that points up */ div.ar ...

  5. 带左右箭头切换的自动滚动图片JS特效

    效果图 按钮 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  6. 用css制作一个三角形箭头

    剑走偏锋——用css制作一个三角形箭头   通常,我们做上图那个三角形,一般都是做张图,而且需要两张,因为一般都是下拉菜单的效果,需要有个hover的样式,箭头是反的.那是不是有更好的办法呢,毕竟要用 ...

  7. 纯CSS绘制的三角形箭头图案【原创】

    参考:http://www.webhek.com/css-triangles/ 使用上下左右的三角形箭头标志,直接用css即可完成,直接附上代码. css: div#up { width: 0px; ...

  8. [Android]自己定义带删除输入框

    在项目开发中,带删除button输入框也是人们经常常使用到的,该文章便介绍一下怎样创建一个带删除输入框.当中,须要解决的问题例如以下: a)创建自己定义editText类 b)在自己定义editTex ...

  9. Android自己定义视图(一):带下划线的TextView

    package com.francis.underlinetextviewtest; import android.content.Context; import android.content.re ...

随机推荐

  1. 把eclipse写好的web项目导入idea 部署到Tomcat

    主要分为项目配置和tomcat配置两大步骤. 一.项目配置 打开idea,选择导入项 选择将要打开的项目路径后,继续选择项目的原本类型(后续引导设置会根据原本的项目类型更新成idea的项目),此例中选 ...

  2. cloudstack api调用python

    通过python调用cloudstack接口,cloudstack 接口通过  admin   key来判断是否有访问有权访问 #!/usr/bin/env python import urllib2 ...

  3. Failed to resolve: com.android.support:design:25.4.0

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 错误:(27, 13) Failed to resolve: com.android.s ...

  4. EXECL中怎么中把换行符换成任意字符

    作文本处理的时候,数据是从execl中拷贝出来的,但是execl中是带有格式的. 导出到txt文本中的时候会出现换行,不满足一行一条数据的要求. 公式 =SUBSTITUTE(A1,),"A ...

  5. Codeforces Round #361 (Div. 2) B. Mike and Shortcuts bfs

    B. Mike and Shortcuts 题目连接: http://www.codeforces.com/contest/689/problem/B Description Recently, Mi ...

  6. Codeforces Round #294 (Div. 2)A - A and B and Chess 水题

    A. A and B and Chess time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. Python学习笔记(八)—集合的学习

    集合(set)是一个无序不重复元素的序列. 基本功能是进行成员关系测试和删除重复元素. 1.集合的作用 它可以把一个列表中重复的数据去掉,而不需要你再写判断 可以做关系测试,比如说有两个科目,一个数学 ...

  8. java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法

    关于反射中getDeclaredMethod().invoke()的学习,来源于项目中的一行代码: SubjectService.class.getDeclaredMethod(autoMatchCo ...

  9. ROS知识(9)----安装Turtlebot2和远程控制Turtlebot2

    安装turtlebot2,场景为:turtlebot2上搭载着一台电脑主机A,该电脑作为主机Master,有自带的电源和3D传感器,roscore在该台机器上启动.pc电脑远程连接A,和A通讯,pc不 ...

  10. Oracle | 给表和字段添加注释

    comment  on  column  表名.字段名   is  '注释内容'; comment on column OPERATOR_INFO.MAIN_OPER_ID is '归属操作员'; c ...