Android曲線更圓滑的簽名畫板
Android開發(fā)中,在自定義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對象,則需要做其他一些額外的操作了。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Android編程實現監(jiān)聽EditText變化的方法
這篇文章主要介紹了Android編程實現監(jiān)聽EditText變化的方法,涉及Android針對EditText的相關操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11
android 獲取手機GSM/CDMA信號信息,并獲得基站信息的方法
下面小編就為大家?guī)硪黄猘ndroid 獲取手機GSM/CDMA信號信息,并獲得基站信息的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-11-11
Android開發(fā)之ProgressBar字體隨著進度條的加載而滾動
這篇文章主要介紹了Android開發(fā)之ProgressBar字體隨著進度條的加載而滾動,需要的朋友可以參考下2017-09-09

