⑴ android中Path類的lineTo方法和quadTo方法畫線的區別
android 中path類lineto方法和quadto方法的區別如下:
1. Path--->quadTo(float x1, float y1, float x2, float y2):
該方法的實現是當畫弧線時會形成平滑的曲線,該曲線又稱為"貝塞爾曲線"(Bezier curve),其中,x1,y1為控制點的坐標值,x2,y2為終點的坐標值;
貝塞爾曲線的形成,就比如我們把一條橡皮筋拉直,橡皮筋的頭尾部對應起點和終點,然後從拉直的橡皮筋中選擇任意一點(除頭尾對應的點外)扯動橡皮筋形成的彎曲形狀,而那個扯動橡皮筋的點就是控制點。
2. Path--->lineTo(float x, float y) :
該方法實現的僅僅是兩點連成一線的繪制線路,這樣,當我們用這個方法繪制曲線時,缺陷就出來了。對比前面quadTo方法lineTo方法繪制的曲線不能形成平滑的彎曲,會出現明顯的兩點形成一線的突痕。
⑵ Android Path類中有直接能判斷坐標點是否在Path內的嗎
java">privatebooleanpointInPath(Pathpath,Pointpoint){
RectFbounds=newRectF();
path.computeBounds(bounds,true);
Regionregion=newRegion();
region.setPath(path,newRegion((int)bounds.left,(int)bounds.top,(int)bounds.right,(int)bounds.bottom));
returnregion.contains(point.x,point.y);
}
將Path 轉變成多個Rect,然後從Rect裡面判斷是否包含某個點
⑶ Android Path類中有直接能判斷坐標點是否在Path內的嗎
下面的代碼描述了一個套索類,該類可以判斷一個點是否在用戶手指所畫的一個套索區域中:
/**
* 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(List<PointF> 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類的lineTo方法和quadTo方法畫線的區別
Path--->quadTo(float x1, float y1, float x2, float y2):
該方法的實現是當畫弧線時會形成平滑的曲線,該曲線又稱為"貝塞爾曲線"(Bezier curve),其中,x1,y1為控制點的坐標值,x2,y2為終點的坐標值;
貝塞爾曲線的形成,就比如把一條橡皮筋拉直,橡皮筋的頭尾部對應起點和終點,然後從拉直的橡皮筋中選擇任意一點(除頭尾對應的點外)扯動橡皮筋形成的彎曲形狀,而那個扯動橡皮筋的點就是控制點。
2. Path--->lineTo(float x, float y) :
該方法實現的僅僅是兩點連成一線的繪制線路,這樣,當用這個方法繪制曲線時,缺陷就出來了。對比前面quadTo方法lineTo方法繪制的曲線不能形成平滑的彎曲,會出現明顯的兩點形成一線的突痕。
⑸ 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類的lineTo方法和quadTo方法畫線的區別
quadTo(float x1, float y1, float x2, float y2)
Add a quadratic bezier from the last point, approaching control point (x1,y1), and ending at (x2,y2).
翻譯一下就是以貝塞爾曲線連接上一點(設為p0(x0, y0))和p2(x2, y2) 而p1(x1, y1)作為控制點,控制點的意思就是p1會把p0到p2的線段拉成一個向p1彎曲的曲線,具體的彎曲效果依p1和p0-p2線段間的位置決定,你試試就知道了。
我用這個quato做過地圖注釋,聊天泡泡之類的曲線效果。
⑺ 怎麼序列化android.graphics.Path
繼承 android.graphics.Path 類,重寫 moveTo, lineTo 等方法,記錄下 path 繪制的每一點的左邊數據;反序列化的時候調用 「drawThisPath」 重繪 path。
相關代碼:
public class CustomPath extends Path implements Serializable {
private static final long serialVersionUID = -5974912367682897467L;
private ArrayList<PathAction> actions = new ArrayList<CustomPath.PathAction>();
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
in.defaultReadObject();
drawThisPath();
}
@Override
public void moveTo(float x, float y) {
actions.add(new ActionMove(x, y));
super.moveTo(x, y);
}
⑻ 安卓path類的addRect方法給我介紹一下裡面的參數是什麼意思,addRect(0,0,8,8
addRect(0, // 左上角x坐標
0, //左上角y坐標
8, //寬
8, //高
path.Direction.CCW ); //逆時針方向
⑼ 有誰知道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);
}
}