Android開(kāi)發(fā)中,在自定義view中,使用Canvas的相應(yīng)操作,實(shí)現(xiàn)類(lèi)似簽名的畫(huà)板,但有一個(gè)問(wèn)題則是,正常的Canvas操作可以用畫(huà)板對(duì)手機(jī)的滑動(dòng)進(jìn)行繪制,但是當(dāng)遇到一些圓滑曲線(xiàn)時(shí),會(huì)顯得不夠順滑,甚至有折角,這里可以使用二階beizer曲線(xiàn)來(lái)使得曲線(xiàn)更加圓滑,提升用戶(hù)體驗(yàn)。
成都創(chuàng)新互聯(lián)擁有十多年成都網(wǎng)站建設(shè)工作經(jīng)驗(yàn),為各大企業(yè)提供做網(wǎng)站、成都網(wǎng)站制作服務(wù),對(duì)于網(wǎng)頁(yè)設(shè)計(jì)、PC網(wǎng)站建設(shè)(電腦版網(wǎng)站建設(shè))、app軟件定制開(kāi)發(fā)、wap網(wǎng)站建設(shè)(手機(jī)版網(wǎng)站建設(shè))、程序開(kāi)發(fā)、網(wǎng)站優(yōu)化(SEO優(yōu)化)、微網(wǎng)站、主機(jī)域名等,憑借多年來(lái)在互聯(lián)網(wǎng)的打拼,我們?cè)诨ヂ?lián)網(wǎng)網(wǎng)站建設(shè)行業(yè)積累了很多網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)經(jīng)驗(yàn),集策劃、開(kāi)發(fā)、設(shè)計(jì)、營(yíng)銷(xiāo)、管理等網(wǎng)站化運(yùn)作于一體,具備承接各種規(guī)模類(lèi)型的網(wǎng)站建設(shè)項(xiàng)目的能力。
定義一個(gè)自定義SignView,繼承自View,在里面定義四個(gè)變量:
private Path mPath; private Paint mPaint; private float mX; private float mY;
在構(gòu)造方法里對(duì)路徑和畫(huà)筆進(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ì)使得背景為黑色,如果畫(huà)筆也選擇黑色的話(huà),則會(huì)成一張全黑的圖片:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); canvas.drawPath(mPath, mPaint); }
接下來(lái)重寫(xiě)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曲線(xiàn)的控制點(diǎn),然后調(diào)用quadTo方法繪制二階beizer曲線(xiàn),進(jìn)行連線(xiàn)操作,最終則是調(diào)用invalidate方法進(jìn)行重繪。
這樣一個(gè)使連線(xiàn)更加圓滑的畫(huà)板控件簡(jiǎn)單實(shí)現(xiàn)了,如果需要保存為本地,或者bitmap對(duì)象,則需要做其他一些額外的操作了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。