关于androidpath的信息

Android Path类中有直接能判断坐标点是否在Path内的吗

下面的代码描述了一个套索类,该类可以判断一个点是否在用户手指所画的一个套索区域中:

10年积累的网站建设、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站策划后付款的网站建设流程,更有宾阳免费网站建设让你可以放心的选择与我们合作。

/**

* a polygon represents a lasso.

*

* @author snow

*

*/

public class Lasso {

// polygon coordinates

private float[] mPolyX, mPolyY;

// number of size in polygon

private int mPolySize;

/**

* default constructor

*

* @param px

* polygon coordinates X

* @param py

* polygon coordinates Y

* @param ps

* polygon sides count

*/

public Lasso(float[] px, float[] py, int ps) {

this.mPolyX = px;

this.mPolyY = py;

this.mPolySize = ps;

}

/**

* constructor

*

* @param pointFs

* points list of the lasso

*/

public Lasso(ListPointF pointFs) {

this.mPolySize = pointFs.size();

this.mPolyX = new float[this.mPolySize];

this.mPolyY = new float[this.mPolySize];

for (int i = 0; i this.mPolySize; i++) {

this.mPolyX[i] = pointFs.get(i).x;

this.mPolyY[i] = pointFs.get(i).y;

}

Log.d("lasso", "lasso size:" + mPolySize);

}

/**

* check if this polygon contains the point.

*

* @param x

* point coordinate X

* @param y

* point coordinate Y

* @return point is in polygon flag

*/

public boolean contains(float x, float y) {

boolean result = false;

for (int i = 0, j = mPolySize - 1; i mPolySize; j = i++) {

if ((mPolyY[i] y mPolyY[j] = y)

|| (mPolyY[j] y mPolyY[i] = y)) {

if (mPolyX[i] + (y - mPolyY[i]) / (mPolyY[j] - mPolyY[i])

* (mPolyX[j] - mPolyX[i]) x) {

result = !result;

}

}

}

return result;

}

}

当用户手指在屏幕上划动时,可以保存手指划过的点用来实例化Lasso类,也可以在用户手指抬起后通过PathMeasure类来对封闭的Path对象取点,然后实例化Lasso类。

Lasso类中的contains方法即是判断点是否在多边形内

Android如何用图片来填充Path封闭路径

你好,Paint mField = new Paint();

mField.setAntiAlias(true);

Path mFieldPath = new Path();

mFieldPath.moveTo(X1,Y1);

mFieldPath.lineTo(X2,Y2);

mFieldPath.lineTo(X3,Y3);

mFieldPath.lineTo(X4,Y4);

mFieldPath.close();

mField.setARGB(200, 255, 215, 0);//设置封闭路径的填充色为金

canvas.drawPath(mFieldPath, mField);

这样绘制出来的图形为一个金矩形,不够美观,因此想到使用图片来填充

直接加上如下代码:

Shader mShader = new BitmapShader(fieldBitmap,Shader.TileMode.REPEAT,Shader.TileMode.MIRROR);

mField.setShader(mShader);

其中,filedBitmap为指定的图片,可以通过mFieldBitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.feild);方式获得

Android中Path类的lineTo方法和quadTo方法画线的区别

Android中的Path类一般用在自定义view里面(当系统提供的控件不能满足你的开发需求,需要自己写 控件,也就是自定义view)。

path类的lineTo方法:lineTo(float x, float y) ,该方法实现的仅仅是两点连成一线的绘制线路。

path类的quadTo方法:quadTo(float x1, float y1, float x2, float y2),该方法的实现是当我们不仅仅是画一条线甚至是画弧线时会形成平滑的曲线,该曲线又称为"贝塞尔曲线"(Bezier curve),其中,x1,y1为控制点的坐标值,x2,y2为终点的坐标值)。

主要区别(效果):对比quadTo方法绘制的线,lineTo绘制的线在弯曲部分很明显的不能形成平滑的弯曲,会出现明显的两点形成一线的突痕。

有谁知道android里的Path类中的quadTo()方法是怎么实现贝塞尔曲线的吗?

/**

* 画曲线(核心代码)

*

* @param startp

* 开始点

* @param endp

* 结束点

* @param canvas

* 画布

* @param paint

* 画笔

*/

private void drawCurve(Point[] points, Canvas canvas, Paint paint)

{

Point startp = new Point();

Point endp = new Point();

for (int i = 0; i points.length - 1; i++)

{

startp = points[i];

endp = points[i + 1];

int wt = (startp.x + endp.x) / 2;

Point p3 = new Point();

Point p4 = new Point();

p3.y = startp.y;

p3.x = wt;

p4.y = endp.y;

p4.x = wt;

// 确定曲线的路径

path = new Path();

path.moveTo(startp.x, startp.y);

path.cubicTo(p3.x, p3.y, p4.x, p4.y, endp.x, endp.y);

canvas.drawPath(path, paint);

}

}

本文题目:关于androidpath的信息
新闻来源:https://www.cdcxhl.com/article44/dsdojhe.html

成都网站建设公司_创新互联,为您提供企业网站制作网站内链App开发静态网站面包屑导航微信公众号

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网页设计公司