Android用canvas画随意方向箭头
来源:互联网 发布:淘宝店铺售假多久恢复 编辑:程序博客网 时间:2024/06/06 20:38
Android用canvas画随意方向箭头
主要是通过正弦余弦(sin、cos、tan)来计算箭头两边形成的三角形的角度,然后计算出箭头两条边的起点位置(终点位置就是尖端)
效果如下图:
主要代码如下:
</pre><pre name="code" class="java">/** * * @param canvas * @param color 颜色 * * @param arrowSize 箭头的边的长度 * * @param x1 中心点坐标 * * @param y1 中心点坐标 * * @param x2 中心点坐标 * * @param y2 中心点坐标 * */void DrawArrows(Canvas canvas, int color, float arrowSize, float x1,float y1, float x2, float y2) {paint.setAntiAlias(true);paint.setStyle(Paint.Style.STROKE);paint.setColor(color);// 画直线canvas.drawLine(x1, y1, x2, y2, paint);// 箭头中的第一条线的起点int x3 = 0;int y3 = 0;// 箭头中的第二条线的起点int x4 = 0;int y4 = 0;double awrad = Math.atan(3.5 / 8);double[] arrXY_1 = rotateVec(x2 - x1, y2 - y1, awrad, arrowSize);double[] arrXY_2 = rotateVec(x2 - x1, y2 - y1, -awrad, arrowSize);// 第一端点Double X3 = Double.valueOf(x2 - arrXY_1[0]);x3 = X3.intValue();Double Y3 = Double.valueOf(y2 - arrXY_1[1]);y3 = Y3.intValue();// 第二端点Double X4 = Double.valueOf(x2 - arrXY_2[0]);x4 = X4.intValue();Double Y4 = Double.valueOf(y2 - arrXY_2[1]);y4 = Y4.intValue();Path arrowsPath = new Path();arrowsPath.moveTo(x2, y2);arrowsPath.lineTo(x3, y3);arrowsPath.lineTo(x4, y4);arrowsPath.close();canvas.drawLine(x3, y3, x2, y2, paint);canvas.drawLine(x4, y4, x2, y2, paint);}private double[] rotateVec(float px, float py, double ang, double arrowSize) {double mathstr[] = new double[2];double vx = px * Math.cos(ang) - py * Math.sin(ang);double vy = px * Math.sin(ang) + py * Math.cos(ang);double d = Math.sqrt(vx * vx + vy * vy);vx = vx / d * arrowSize;vy = vy / d * arrowSize;mathstr[0] = vx;mathstr[1] = vy;return mathstr;}
基本都是高中数学的问题,没啥难度。
0 0
- Android用canvas画随意方向箭头
- android 使用Canvas画箭头
- android 使用Canvas画箭头
- canvas 画箭头
- 用Canvas画带箭头的线(包括箭头向内和箭头向外)
- canvas使用js画箭头
- 用H5 Canvas 绘画箭头
- 方便的弹出视图,可随意定义箭头方向,自动计算位置
- Android ExpandableListView点击改变箭头方向
- js canvas画带箭头的虚线
- 使用canvas画带箭头的圆环
- flash 方向箭头
- CSS制作方向箭头
- html5 canvas制作箭头
- MFC 画围绕一点不断变化方向的箭头函数
- 绘制类似QQ截图中的箭头(使用Canvas画箭头)
- Android 通过CANVAS旋转 绘制文字 竖直方向DEMO
- UML之用例图箭头方向
- Log4J配置详解
- void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)
- TCP序列号和确认号详解
- 权限管理_CPS_FUNC_PERMISSION_DATA 2
- javaee学习之路(三)HTTP协议学习
- Android用canvas画随意方向箭头
- ajax原理讲解
- 下拉刷新和上拉加载的原理
- Oracle Data Guard 理论知识
- Maven3路程(一)环境搭建
- UESTC-31 饭卡---- 贪婪算法中的0-1背包问题
- GitHub和SourceTree入门教程
- pyqt python thread signal slot 转载一篇感觉不错的代码,算做个笔记吧
- oracle分页查询sql语法-最高效的分页