Android曲線更圓滑的簽名畫板
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í)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)畫板功能(二)
- Android實(shí)現(xiàn)畫板功能(一)
- Android實(shí)現(xiàn)簡(jiǎn)單畫圖畫板
- Android studio實(shí)現(xiàn)畫板功能
- Android SurfaceView畫板操作
- Android實(shí)現(xiàn)畫畫板案例
- Android畫板開(kāi)發(fā)之添加文本文字
- Android畫板開(kāi)發(fā)之添加背景和保存畫板內(nèi)容為圖片
- Android畫板開(kāi)發(fā)之撤銷反撤銷功能
- Android畫板開(kāi)發(fā)之基本畫筆功能
- Android畫板開(kāi)發(fā)之橡皮擦功能
- Android實(shí)現(xiàn)繪畫板功能
相關(guān)文章
Android實(shí)現(xiàn)捕獲TextView超鏈接的方法
這篇文章主要介紹了Android實(shí)現(xiàn)捕獲TextView超鏈接的方法,涉及Android查找TextView中超鏈接的相關(guān)實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10MT6589平臺(tái)通話錄音時(shí)播放提示音給對(duì)方功能的具體實(shí)現(xiàn)
MT6589平臺(tái)通話錄音時(shí)如何播放提示音給對(duì)方,可以通過(guò)修改以下文件即可,希望對(duì)你有所幫助2013-06-06ViewPager實(shí)現(xiàn)帶引導(dǎo)小圓點(diǎn)與自動(dòng)跳轉(zhuǎn)的引導(dǎo)界面
這篇文章主要為大家詳細(xì)介紹了ViewPager實(shí)現(xiàn)帶引導(dǎo)小圓點(diǎn)與自動(dòng)跳轉(zhuǎn)的引導(dǎo)界面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11Android動(dòng)態(tài)自定義圓形進(jìn)度條
這篇文章主要介紹了Android動(dòng)態(tài)自定義圓形進(jìn)度條,需要的朋友可以參考下2017-03-03Android 6.0調(diào)用相機(jī)圖冊(cè)崩潰的完美解決方案
這篇文章主要介紹了Android 6.0調(diào)用相機(jī)圖冊(cè)崩潰的完美解決方案,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09Android二維碼開(kāi)發(fā)學(xué)習(xí)教程
這篇文章主要為大家分享了Android二維碼開(kāi)發(fā)學(xué)習(xí)教程,感興趣的小伙伴們可以參考一下2016-07-07Android 進(jìn)度條自動(dòng)前進(jìn)效果的實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 進(jìn)度條自動(dòng)前進(jìn)效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07Android項(xiàng)目實(shí)戰(zhàn)手把手教你畫圓形水波紋loadingview
這篇文章主要為大家詳細(xì)介紹了Android項(xiàng)目實(shí)戰(zhàn)手把手教你畫圓形水波紋loadingview,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01