Android曲線更圓滑的簽名畫板
Android開發(fā)中,在自定義view中,使用Canvas的相應(yīng)操作,實現(xiàn)類似簽名的畫板,但有一個問題則是,正常的Canvas操作可以用畫板對手機的滑動進行繪制,但是當(dāng)遇到一些圓滑曲線時,會顯得不夠順滑,甚至有折角,這里可以使用二階beizer曲線來使得曲線更加圓滑,提升用戶體驗。
定義一個自定義SignView,繼承自View,在里面定義四個變量:
private Path mPath; private Paint mPaint; private float mX; private float mY;
在構(gòu)造方法里對路徑和畫筆進行初始化:
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做操作,這里值得一提的是調(diào)用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;
}
手指按下時,取得按下的坐標(biāo),移動的時候,得到當(dāng)前左邊,且取兩點中間的cx,cy作為beizer曲線的控制點,然后調(diào)用quadTo方法繪制二階beizer曲線,進行連線操作,最終則是調(diào)用invalidate方法進行重繪。
這樣一個使連線更加圓滑的畫板控件簡單實現(xiàn)了,如果需要保存為本地,或者bitmap對象,則需要做其他一些額外的操作了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android實現(xiàn)捕獲TextView超鏈接的方法
這篇文章主要介紹了Android實現(xiàn)捕獲TextView超鏈接的方法,涉及Android查找TextView中超鏈接的相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
MT6589平臺通話錄音時播放提示音給對方功能的具體實現(xiàn)
MT6589平臺通話錄音時如何播放提示音給對方,可以通過修改以下文件即可,希望對你有所幫助2013-06-06
ViewPager實現(xiàn)帶引導(dǎo)小圓點與自動跳轉(zhuǎn)的引導(dǎo)界面
這篇文章主要為大家詳細介紹了ViewPager實現(xiàn)帶引導(dǎo)小圓點與自動跳轉(zhuǎn)的引導(dǎo)界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-11-11
Android 6.0調(diào)用相機圖冊崩潰的完美解決方案
這篇文章主要介紹了Android 6.0調(diào)用相機圖冊崩潰的完美解決方案,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2016-09-09
Android項目實戰(zhàn)手把手教你畫圓形水波紋loadingview
這篇文章主要為大家詳細介紹了Android項目實戰(zhàn)手把手教你畫圓形水波紋loadingview,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01

