91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android曲線更圓滑的簽名畫板

發布時間:2020-10-13 19:53:25 來源:腳本之家 閱讀:170 作者:李, 泰愚 欄目:移動開發

Android開發中,在自定義view中,使用Canvas的相應操作,實現類似簽名的畫板,但有一個問題則是,正常的Canvas操作可以用畫板對手機的滑動進行繪制,但是當遇到一些圓滑曲線時,會顯得不夠順滑,甚至有折角,這里可以使用二階beizer曲線來使得曲線更加圓滑,提升用戶體驗。

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

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

在構造方法里對路徑和畫筆進行初始化:

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()中對canvas做操作,這里值得一提的是調用drawColor方法,不然最終如果保存為本地圖片的話,會使得背景為黑色,如果畫筆也選擇黑色的話,則會成一張全黑的圖片:

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

接下來重寫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;
 }

手指按下時,取得按下的坐標,移動的時候,得到當前左邊,且取兩點中間的cx,cy作為beizer曲線的控制點,然后調用quadTo方法繪制二階beizer曲線,進行連線操作,最終則是調用invalidate方法進行重繪。

這樣一個使連線更加圓滑的畫板控件簡單實現了,如果需要保存為本地,或者bitmap對象,則需要做其他一些額外的操作了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投县| 彭山县| 原阳县| 陇南市| 西乌珠穆沁旗| 桐柏县| 奎屯市| 略阳县| 潮安县| 苏尼特左旗| 丰镇市| 南溪县| 仙游县| 元朗区| 泗阳县| 杂多县| 闻喜县| 遵义市| 固安县| 五莲县| 遂宁市| 玉门市| 青河县| 东乡族自治县| 宁波市| 桑植县| 汝南县| 大荔县| 察隅县| 永德县| 会东县| 洪江市| 方城县| 临漳县| 洛隆县| 韶关市| 卓资县| 平昌县| 宝应县| 华池县| 抚州市|