关于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的信息
当前链接:http://pwwzsj.com/article/dsdojhe.html