国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android曲線更圓滑的簽名畫板

2019-12-12 00:59:16
字體:
來源:轉載
供稿:網友

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方法,不然最終如果保存為本地圖片的話,會使得背景為黑色,如果畫筆也選擇黑色的話,則會成一張全黑的圖片:

@Overrideprotected 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對象,則需要做其他一些額外的操作了。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 略阳县| 苍溪县| 和龙市| 彭山县| 淮安市| 封丘县| 广南县| 田阳县| 安西县| 金沙县| 资兴市| 凌海市| 临城县| 得荣县| 亳州市| 通榆县| 临邑县| 乌鲁木齐县| 义乌市| 丰原市| 滁州市| 柳州市| 咸丰县| 织金县| 德昌县| 县级市| 旅游| 萍乡市| 江源县| 赤城县| 读书| 浪卡子县| 广宁县| 平顶山市| 九江市| 香格里拉县| 武义县| 龙岩市| 德庆县| 益阳市| 永德县|