Android曲線更圓滑的簽名畫板
Android開發(fā)中,在自定義view中,使用Canvas的相應(yīng)操作,實(shí)現(xiàn)類似簽名的畫板,但有一個(gè)問題則是,正常的Canvas操作可以用畫板對(duì)手機(jī)的滑動(dòng)進(jìn)行繪制,但是當(dāng)遇到一些圓滑曲線時(shí),會(huì)顯得不夠順滑,甚至有折角,這里可以使用二階beizer曲線來使得曲線更加圓滑,提升用戶體驗(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);
}
接下來重寫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畫板開發(fā)之添加文本文字
- Android畫板開發(fā)之添加背景和保存畫板內(nèi)容為圖片
- Android畫板開發(fā)之撤銷反撤銷功能
- Android畫板開發(fā)之基本畫筆功能
- Android畫板開發(fā)之橡皮擦功能
- Android實(shí)現(xiàn)繪畫板功能
相關(guān)文章
詳解android在mob平臺(tái)實(shí)現(xiàn)qq登陸和分享
這篇文章主要介紹了詳解android在mob平臺(tái)實(shí)現(xiàn)qq登陸和分享,對(duì)接入第三方平臺(tái)SDK感興趣的同學(xué)們,可以參考下2021-04-04
Android編程實(shí)現(xiàn)監(jiān)聽EditText變化的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)監(jiān)聽EditText變化的方法,涉及Android針對(duì)EditText的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
android 獲取手機(jī)GSM/CDMA信號(hào)信息,并獲得基站信息的方法
下面小編就為大家?guī)硪黄猘ndroid 獲取手機(jī)GSM/CDMA信號(hào)信息,并獲得基站信息的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
Flutter實(shí)現(xiàn)旋轉(zhuǎn)掃描效果
這篇文章主要介紹了通過Flutter RotationTransition實(shí)現(xiàn)雷達(dá)旋轉(zhuǎn)掃描的效果,文中的示例代碼講解詳細(xì),感興趣的同學(xué)可以動(dòng)手試一試2022-01-01
Flutter移動(dòng)端進(jìn)行多渠道打包發(fā)布的全過程
在使用flutter開發(fā)的過程中,需要根據(jù)不同的環(huán)境,不同的包名來打包,下面這篇文章主要給大家介紹了關(guān)于Flutter移動(dòng)端進(jìn)行多渠道打包發(fā)布的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
photoView實(shí)現(xiàn)圖片多點(diǎn)觸控效果
這篇文章主要為大家詳細(xì)介紹了photoView實(shí)現(xiàn)圖片多點(diǎn)觸控效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
Android開發(fā)之ProgressBar字體隨著進(jìn)度條的加載而滾動(dòng)
這篇文章主要介紹了Android開發(fā)之ProgressBar字體隨著進(jìn)度條的加載而滾動(dòng),需要的朋友可以參考下2017-09-09

