溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android曲線更圓滑的簽名畫板

發(fā)布時(shí)間:2020-10-13 19:53:25 來(lái)源:腳本之家 閱讀:163 作者:李, 泰愚 欄目:移動(dòng)開(kāi)發(fā)

Android開(kāi)發(fā)中,在自定義view中,使用Canvas的相應(yīng)操作,實(shí)現(xiàn)類似簽名的畫板,但有一個(gè)問(wèn)題則是,正常的Canvas操作可以用畫板對(duì)手機(jī)的滑動(dòng)進(jìn)行繪制,但是當(dāng)遇到一些圓滑曲線時(shí),會(huì)顯得不夠順滑,甚至有折角,這里可以使用二階beizer曲線來(lái)使得曲線更加圓滑,提升用戶體驗(yàn)。

定義一個(gè)自定義SignView,繼承自View,在里面定義四個(gè)變量:

private Path mPath;
private Paint mPaint;
private float mX;
private float mY;

在構(gòu)造方法里對(duì)路徑和畫筆進(jìn)行初始化:

public SignView(Context context, AttributeSet attrs) {
 super(context, attrs);
 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
 mPaint.setStyle(Paint.Style.STROKE);
 mPaint.setStrokeWidth(10);
 
 mPath = new Path();
}

在onDraw()中對(duì)canvas做操作,這里值得一提的是調(diào)用drawColor方法,不然最終如果保存為本地圖片的話,會(huì)使得背景為黑色,如果畫筆也選擇黑色的話,則會(huì)成一張全黑的圖片:

@Override
protected void onDraw(Canvas canvas) {
 super.onDraw(canvas);
 canvas.drawColor(Color.WHITE);
 canvas.drawPath(mPath, mPaint);
}

接下來(lái)重寫onTouchEvent方法:

@Override
 public boolean onTouchEvent(MotionEvent event) {
  switch (event.getAction()) {
   case MotionEvent.ACTION_DOWN:
    mX = event.getX();
    mY = event.getY();
    mPath.moveTo(mX, mY);
    break;
   case MotionEvent.ACTION_MOVE:
    float x1 = event.getX();
    float y1 = event.getY();
    float cx = (x1 + mX) / 2;
    float cy = (y1 + mY) / 2;
    mPath.quadTo(mX, mY, cx, cy);
    mX = x1;
    mY = y1;
    break;
  }
  invalidate();
  return true;
 }

手指按下時(shí),取得按下的坐標(biāo),移動(dòng)的時(shí)候,得到當(dāng)前左邊,且取兩點(diǎn)中間的cx,cy作為beizer曲線的控制點(diǎn),然后調(diào)用quadTo方法繪制二階beizer曲線,進(jìn)行連線操作,最終則是調(diào)用invalidate方法進(jìn)行重繪。

這樣一個(gè)使連線更加圓滑的畫板控件簡(jiǎn)單實(shí)現(xiàn)了,如果需要保存為本地,或者bitmap對(duì)象,則需要做其他一些額外的操作了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI