android 自定义箭头控件
来源:互联网 发布:filco机械键盘 mac 编辑:程序博客网 时间:2024/06/05 20:57
上一篇是三角形,这回变箭头,很相似。。。
public class ArrowView extends ImageView {private Paint mPaint;private float angle;// 旋转角度oprivate 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;private float mPadding;private float mDepth=5;public ArrowView(Context context) {super(context);init(context, null, 0);}public ArrowView(Context context, AttributeSet attrs) {super(context, attrs);init(context, attrs, 0);}public ArrowView(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 ArrowView setWidth(float width) {this.mWidth = width;return this;}public ArrowView setHeight(float height) {this.mHeight = height;return this;}/** * * @Title: setAngle * @Description: 按角度调整箭头方向 0-360 * @param @param angle * @return ArrowView this * @throws */public ArrowView setAngle(float angle) {this.angle = angle;invalidate();return this;}/** * * @Title: setDirection * @Description: 调整箭头方向 LEFT,RIGHT,UP,DOWN * @param @param direction * @return ArrowView this * @throws */public ArrowView setDirection(int direction) {this.angle = direction;invalidate();return this;}public ArrowView setDepth(float depth){this.mDepth = depth;invalidate();return this;}private void getViewAttr() {mWidth = getWidth();mHeight = getHeight();mPadding = getPaddingLeft();}private void drawArrow(Canvas canvas) {getViewAttr();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);// 绘制区域移至控件中间,并且填充宽、高中较窄的边if (mPadding > 0 && mPadding * 2 < diameter) {rf.inset(mPadding, mPadding);}Path path = new Path();path.moveTo(rf.left + rf.width() / 2, rf.top);path.lineTo(rf.left + rf.width() / 2+ calTriangleSileLength(rf.width()) / 2,rf.top + 3 * rf.width() / 4);path.lineTo(rf.left + rf.width() / 2, rf.top+mDepth);//比三角形多一个点path.lineTo(rf.left + rf.width() / 2- calTriangleSileLength(rf.width()) / 2,rf.top + 3 * rf.width() / 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)));}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);drawArrow(canvas);}}
- android 自定义箭头控件
- 为ExpandableListView这个控件自定义箭头
- Android实现带箭头的自定义Progressbar
- Android : 自定义带箭头的Button
- 自定义Android中Expandablelistview中的下拉箭头
- [Android自定义控件] Android自定义控件
- Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- [Android自定义控件] Android自定义控件
- Android中替换ExpandableListView控件前面的箭头图标
- Android中替换ExpandableListView控件前面的箭头图标
- Android中替换ExpandableListView控件前面的箭头图标
- Android自定义圆角以及向下箭头的ImageView
- Android 自定义控件 单页翻书控件
- android虚线控件---自定义控件
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(2)RPD资料档案库创建
- Linux(RedHat,Centos)上scrapy详尽安装笔记 【转】
- (12)空间不足,留个亡羊补牢的机会给自己。
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(3)创建一个简单的分析
- 【白书】第一章习题
- android 自定义箭头控件
- 过神鬼传奇SSDT HOOK 方法
- 蓝桥杯:振兴中华
- cocos2dx之如何生成动画
- Oracle BIEE (Business Intelligence) 11g 11.1.1.6.0 学习(1)安装
- 拦截聊天记录--Hook技巧简介
- Dom4J解析xml
- 去北大听完讲座的感受
- 项目进阶 之 持续构建环境搭建(一)架构