android 自定义显示三角型控件

原创 2013年12月03日 20:02:16
public class TriangleView extends ImageView {
	private Paint mPaint;
	private float angle;// 旋转角度
          private float mWidth;
	private float mHeight;
         public static final int LEFT = 270;
	public static final int RIGHT = 90;public static final int UP = 0;
	public static final int DOWN = 180;
	public TriangleView(Context context) {
		super(context);
		init(context, null, 0);
	}
	public TriangleView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context, attrs, 0);
	}
	public TriangleView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(context, attrs, defStyle);
	}
	private void init(Context context, AttributeSet attrs, int defStyle) {
		initPaint();
	}
	private void initPaint() {
		mPaint = new Paint();
		mPaint.setAntiAlias(true);
		mPaint.setColor(Color.RED);
		mPaint.setStrokeJoin(Join.ROUND);
		mPaint.setStrokeCap(Cap.ROUND);
		mPaint.setStrokeWidth(3);
	}
	public TriangleView setWidth(float width){
		this.mWidth = width;
		return this;
	}
	public TriangleView setHeight(float height){
		this.mHeight = height;
		return this;
	}
	/**
	 * 
	 * @Title: setAngle 
	 * @Description: 按角度调整箭头方向 0-360
	 * @param @param angle    
	 * @return TriangleView this 
	 * @throws
	 */
	public TriangleView setAngle(float angle) {
		this.angle = angle;
		invalidate();
		return this;
	}
	/**
	 * 
	 * @Title: setDirection 
	 * @Description: 调整箭头方向  LEFT,RIGHT,UP,DOWN
	 * @param @param direction    
	 * @return TriangleView this
	 * @throws
	 */
	public TriangleView setDirection(int direction){
		this.angle = direction;
		invalidate();
		return this;
	}
	/**
	 * 
	 * @Title: setColor 
	 * @Description: 给三角形填充颜色
	 * @param @param color    
	 * @return TriangleView this    
	 * @throws
	 */
	public TriangleView setColor(int color){
		mPaint.setColor(color);
		invalidate();
		return this;
	}
	private void drawTriangle(Canvas canvas) {
		mWidth = getWidth();
		mHeight = getHeight();
		float diameter = mWidth > mHeight ? mHeight : mWidth;// 直径
		RectF rf = new RectF(0, 0, diameter, diameter);
		float left = (mWidth - diameter) / 2;
		float top = (mHeight - diameter) / 2;
		rf.offsetTo(left, top);// 绘制区域移至控件中间,并且填充宽、高中较窄的边
		Path path = new Path();
		path.moveTo(rf.left + rf.width() / 2, 0);
		path.lineTo(rf.left + rf.width() / 2 + calTriangleSileLength(diameter)
				/ 2, rf.top + 3 * diameter / 4);
		path.lineTo(rf.left + rf.width() / 2 - calTriangleSileLength(diameter)
				/ 2, rf.top + 3 * diameter / 4);
		canvas.save();
		canvas.rotate(angle, rf.left + rf.width() / 2, rf.top + rf.height() / 2);
		canvas.drawPath(path, mPaint);
		canvas.restore();
	}
	/**
	 * 
	 * @Title: calTriangleSileLength
	 * @Description: 计算三角形边长
	 * @param @param diameter 
	 * @param @return
	 * @return float
	 * @throws
	 */
	private float calTriangleSileLength(float diameter) {
		return (float) (2 * Math.sqrt(Math.pow(diameter / 2, 2)
				- Math.pow(diameter / 4, 2)));
	}

	@Override
	protected void onDraw(Canvas canvas) {super.onDraw(canvas);
		drawTriangle(canvas);
	}

}


前面写过一个给控件设置圆角的背景的drawble类,用起来蛮顺手。今天写一个自定义三角型小控件,有用的拿去

 

 

 

 

 

自定义带三角形箭头的TextView

package com.example.sanjjiaoxing; import android.content.Context; import android.content.res.Typed...
  • wuxifu001
  • wuxifu001
  • 2015年06月06日 18:27
  • 2283

三角形的自定义View

在项目的弹窗页有倒三角形指示的设计图,如下: 最方便的做法就是要求切一张倒三角的图出来,我这里用的代码实现方法,先自定义一个三角形TriangleView,代码如下: import android...
  • chinaboyliusir
  • chinaboyliusir
  • 2016年06月27日 10:18
  • 737

Android之ViewPagerIndictor三角形指示器

话不多说,上效果图啊 根据慕课网里面写出来的,可以点击,也可以滑动 MainActivity类:package com.example.viewpagerindicator;import ja...
  • qq_33642117
  • qq_33642117
  • 2016年06月18日 12:01
  • 1023

android-open-project 安卓开源项目汇总

Android开源项目分类汇总 欢迎大家推荐好的Android开源项目,可直接Commit或在 收集&提交页 中告诉我,欢迎Star、Fork :) 微博:Trinea    主页:www...
  • chenshufei2
  • chenshufei2
  • 2015年03月11日 17:25
  • 1916

Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解

Android绘图机制(二)——自定义View绘制形, 圆形, 三角形, 扇形, 椭圆, 曲线,文字和图片的坐标讲解 我们要想画好一些炫酷的View,首先我们得知道怎么去画一些基础的图案,比如矩形...
  • qq_26787115
  • qq_26787115
  • 2016年01月06日 09:14
  • 8173

Android三角标签View:TriangleLabelView

Android三角标签View:TriangleLabelView 在一些商城、产品推销类APP中,如淘宝、京东、电影门票销售、商品降价促销这类的APP,常常会在其APP中看到,某些商品的左上角...
  • sinat_30474567
  • sinat_30474567
  • 2016年08月10日 21:36
  • 726

android 效果集合

目录 UI UI卫星菜单节选器下拉刷新模糊效果HUD与Toast进度条UI其它 动画网络相关响应式编程地图数据库图像浏览及处理视频音频处理测试及调试动态更新热更新消息推送与及时通讯完整项...
  • zkcharge
  • zkcharge
  • 2018年01月22日 14:07
  • 20

Android 通过 shape 实现三角形气泡效果

需要实现 UI 给出的下面两种图中带三角形气泡的效果:如果使用 .9 图,一方面会增加安装包体积,另一方面,拉伸后可能变形。将气泡分解可知,气泡由 正/倒三角形 和 圆角长方形 组成,于是可以通过组合...
  • hust_twj
  • hust_twj
  • 2017年11月22日 11:08
  • 2163

绘制android图标左上角小三角形

  • 2015年10月10日 15:05
  • 1.23MB
  • 下载

Android 三角标签(自定义Textview控件)

// 倾斜度45,上下左右居中 int w=getMeasuredWidth(); canvas.rotate(-45,w,w); // 绘制这个三角形...
  • qq_28934205
  • qq_28934205
  • 2016年05月09日 15:18
  • 1970
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 自定义显示三角型控件
举报原因:
原因补充:

(最多只允许输入30个字)