当前位置: 首页 > news >正文

校园网站建设管理办法网络服务器图片

校园网站建设管理办法,网络服务器图片,wordpress获取分类链接地址,什么网站个人可以建设安卓Path搭配Paint可以设置线帽,我想能不能把我自己的线条绘制Demo也加上类似的功能。 线头规则描述: 1、设一个线宽一半的线段,坐标为(0, 0)到(-lineWidth / 2, 0)。 2、设步骤1的线段有一垂直于它的向量(0,1),然后传…

安卓Path搭配Paint可以设置线帽,我想能不能把我自己的线条绘制Demo也加上类似的功能。

线头规则描述:

        1、设一个线宽一半的线段,坐标为(0, 0)到(-lineWidth / 2, 0)。

        2、设步骤1的线段有一垂直于它的向量(0,1),然后传入最近两次触摸坐标,并将第二次触摸坐标减去第一次触摸触摸坐标,得到当前画线的前进方向向量,然后求与(0, 1)向量夹角。

        3、以从步骤2中得到的夹角,到该夹角+180度为止,以一定的角度步进量旋转步骤1的线段,形成一个切合线段的半圆。

        4、最后添加一个(-lineWidth / 2, 0)到(lineWidth / 2, 0)的线段并旋转到步骤3的最终角度,方便和线段本体对接。

线尾规则描述:

        1、只需把线头的规则中的步骤二改为,最后一次的之前一次的触摸坐标 减去 最后一次的触摸坐标作为方向向量即可(和前进方向相反)。

        2、去冗余处理,每前进一次,就把之前添加的线尾半圆顶点删掉。

        关键代码:

        

 /**给线头添加符合线宽的边界,便于和纤体本身链接**/private void lineCapAddBorder(double angle, float firstVec[], List<float[]> newVecs) {try {float rotatedVec0[] = rotate2d(new float[] {-mLineWidth / 2f, 0}, angle + 180);float rotatedVec1[] = rotate2d(new float[] {mLineWidth / 2f, 0}, angle + 180);float newVec[] = new float[6];//偏移到对应位置newVec[0] = rotatedVec0[0] + firstVec[0];newVec[1] = rotatedVec0[1] + firstVec[1];newVec[3] = rotatedVec1[0] + firstVec[0];newVec[4] = rotatedVec1[1] + firstVec[1];newVecs.add(newVec);} catch (Exception e) {e.printStackTrace();}}/**绘制线头* @param isHead 是否曲线头部添加线帽,否则视为曲线尾部添加线帽**/private int lineCap(boolean isHead, @NonNull float firstVec[], @NonNull float secVec[], int color) {if (null == firstVec) {return -1;}if (mHeadPointBuf == null) {mHeadCapPointByteBuffer = ByteBuffer.allocateDirect(mHeadInitVertexCount * 4);    //顶点数 * sizeof(float)mHeadCapPointByteBuffer.order(ByteOrder.nativeOrder());mHeadPointBuf = mHeadCapPointByteBuffer.asFloatBuffer();mHeadPointBuf.position(0);mHeadCapPointBufferPos = 0;}//按初始化大小初始化RGBA字节数组和RGBA数组if (mHeadColorBuf == null) {mHeadCapColorByteBuffer = ByteBuffer.allocateDirect(mHeadInitColorCount * 4);mHeadCapColorByteBuffer.order(ByteOrder.nativeOrder());mHeadColorBuf = mHeadCapColorByteBuffer.asFloatBuffer();mHeadColorBuf.position(0);mHeadCapColorBufferPos = 0;}/**1、了解线条开始的方向,将半径线条绕旋转该方向与标准测量用向量的夹角的角度量* 2、旋转180度时按照一定步进产生多个顶点,todo 但怎么确定旋转的方向是顺时针还是逆时针?以什么为依据判断?以传入向量方向为参考,但具体怎么做?*/float initVert[] = new float[] { //初始时左端点的坐标,初始时在原点两侧,然后以传入的顶点作为偏移量-mLineWidth / 2f, 0};//旋转并在过程中产生顶点float actualVec[] = new float[3];actualVec[0] = secVec[0] - firstVec[0];actualVec[1] = secVec[1] - firstVec[1];double angle = calcAngleOfVectorsOnXYPanel(mStandardVec, actualVec); //对比基准向量旋转了多少度int step = 6; //改成只有90度可以得到一个尖头笔帽List<float[]> newVecs = new LinkedList<>();if (!isHead) {//给曲线结尾加一段和线宽等长的边lineCapAddBorder(angle, firstVec, newVecs);}//半圆线头for (double degreeBias = angle; degreeBias <= 180 + angle; degreeBias += step) {try {float rotatedVec[] = rotate2d(initVert, degreeBias);float newVec[] = new float[6];//偏移到对应位置newVec[0] = rotatedVec[0] + firstVec[0];newVec[1] = rotatedVec[1] + firstVec[1];newVec[3] += firstVec[0];newVec[4] += firstVec[1];newVecs.add(newVec);} catch (Exception e) {e.printStackTrace();}}if (isHead) {//给曲线开头加一段和线宽等长的边lineCapAddBorder(angle, firstVec, newVecs);}for (float[] newVec : newVecs) {for (int i = 0; i < newVec.length; i++) {checkCapacity();mPointBuf.put(mPointBufferPos++, newVec[i]);}for (int i = 0; i < newVec.length / 3; i++) {checkCapacity();//写入颜色值r,g,b,afloat alpha = (float) (((color & 0xFF000000) >> 24) & 0x000000FF) / 255f;float blue = (float) ((color & 0x000000FF)) / 255f;float green = (float) ((color & 0x0000FF00) >> 8) / 255f;float red = (float) ((color & 0x00FF0000) >> 16) / 255f;mColorBuf.put(mColorBufferPos++, red);mColorBuf.put(mColorBufferPos++, green);mColorBuf.put(mColorBufferPos++, blue);mColorBuf.put(mColorBufferPos++, alpha);}}return newVecs.size() * newVecs.get(0).length;}

最后效果:

旋转步进设定为90度,因此能显示尖头效果:

 设定为15度,则可以形成非常圆润的线头:

以线条方式绘制,即可看到顶点构成如下图:

 基本再现了Android path + paint的大部分线条效果了。

http://www.dt0577.cn/news/2059.html

相关文章:

  • 免费建个超市网站南宁哪里有seo推广厂家
  • 网站开发技术参考文献关键词优化排名软件
  • 房产类网站制作商东莞优化网站关键词优化
  • wordpress baidu提交北京网站优化排名推广
  • 有自己域名主机怎么做网站刚刚济南发通知
  • 新网站建设方案ppt免费推广方法
  • js做网站吸引人的软文标题
  • 深圳宝安通网站建设怎样在百度上做广告推广
  • 网站建设与运营意义必应bing搜索引擎
  • 慈溪哪里有做网站单页应用seo如何解决
  • 宁波俄语网站建设搜一搜排名点击软件
  • 创新的广州做网站纯手工seo公司
  • 北京疫情防控最新消息长沙的seo网络公司
  • 网站制作公司 北京淘宝付费推广有几种方式
  • 专门做游戏的网站选择一个产品做营销方案
  • 靠谱网站建设公司价格武汉seo公司哪家专业
  • 淘宝网做宝贝详情用哪个网站深圳谷歌推广公司
  • 优化培训方式南和网站seo
  • 企业网站cms 开源搜索引擎优化叫什么
  • 企业网站界面东莞网站推广软件
  • cms高端建站凡科建站收费价目表
  • 对网站做数据统计的目的是什么广点通广告平台
  • 网站图片滚动素材杭州百度seo优化
  • 网站地域分站怎么做桂林最新消息今天
  • 泰国公共建设网站注册商标查询官网入口
  • 网站缩略图代码学生个人网页制作代码
  • 五莲县网站建设怎样建网站平台
  • 淄博网站建设费用企业类网站有哪些例子
  • 自己做的网站竞价优化百度游戏排行榜
  • ssm框架做网站百度快照是怎么做上去的