Android如何自定義視圖實(shí)現(xiàn)手指移動(dòng)軌跡

這篇文章給大家分享的是有關(guān)Android如何自定義視圖實(shí)現(xiàn)手指移動(dòng)軌跡的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

華寧網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),華寧網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為華寧1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的華寧做網(wǎng)站的公司定做!

一、什么是貝塞爾曲線

貝塞爾曲線(Bézier curve),又稱貝茲曲線或貝濟(jì)埃曲線,是應(yīng)用于二維圖形應(yīng)用程序的數(shù)學(xué)曲線。一般的矢量圖形軟件通過(guò)它來(lái)精確畫(huà)出曲線,貝茲曲線由線段與節(jié)點(diǎn)組成,節(jié)點(diǎn)是可拖動(dòng)的支點(diǎn),線段像可伸縮的皮筋,我們?cè)诶L圖工具上看到的鋼筆工具就是來(lái)做這種矢量曲線的。貝塞爾曲線是計(jì)算機(jī)圖形學(xué)中相當(dāng)重要的參數(shù)曲線,在一些比較成熟的位圖軟件中也有貝塞爾曲線工具,如PhotoShop等。

二、貝塞爾曲線公式

三、手指軌跡原理

因?yàn)檫@個(gè)我們用的是自定義控件,所以我們創(chuàng)建一個(gè)finger的類集成View,重寫(xiě)onDraw onTouchEvent這個(gè)兩個(gè)方法

public finger(Context context, @Nullable AttributeSet attrs)需要這個(gè)構(gòu)造方法

其實(shí)手指軌跡的原理也很簡(jiǎn)單,就是通過(guò)onTouchEvent來(lái)獲取道手指的位置,來(lái)繪制path路徑即可。

四、分析代碼

這里我先寫(xiě)出全部的代碼,后面我再來(lái)一一分析代碼的作用:

全部代碼:

package com.campus.shopping.drawtext; import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View; /** * Created by sang on 2018/6/24. */ public class MyView extends View {  private Path mPath = new Path(); private float mPreX,mPreY;  public MyView(Context context, @Nullable AttributeSet attrs) {  super(context, attrs); }  @Override public boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()) {   case MotionEvent.ACTION_DOWN: {    mPath.moveTo(event.getX(), event.getY());    mPreX = event.getX();    mPreY = event.getY();    return true;   }   case MotionEvent.ACTION_MOVE:    float endX = (mPreX+event.getX())/2;    float endY = (mPreY+event.getY())/2;    mPath.quadTo(mPreX,mPreY,endX,endY);    mPreX = event.getX();    mPreY = event.getY();    invalidate();    break;   default:    break;  }  return super.onTouchEvent(event); }  public void reset(){  mPath.reset();  invalidate(); }  @Override protected void onDraw(Canvas canvas) {  super.onDraw(canvas);  Paint paint = new Paint();  paint.setColor(Color.WHITE);  paint.setStyle(Paint.Style.STROKE);   canvas.drawPath(mPath, paint); }}

onTouchEvent方法:

public boolean onTouchEvent(MotionEvent event) {  switch (event.getAction()) {   case MotionEvent.ACTION_DOWN: {    mPath.moveTo(event.getX(), event.getY());    mPreX = event.getX();    mPreY = event.getY();    return true;   }   case MotionEvent.ACTION_MOVE:    float endX = (mPreX+event.getX())/2;    float endY = (mPreY+event.getY())/2;    mPath.quadTo(mPreX,mPreY,endX,endY);    mPreX = event.getX();    mPreY = event.getY();    invalidate();    break;   default:    break;  }  return super.onTouchEvent(event); }

當(dāng)手指按下觸發(fā)了ACTION_DOWN時(shí),這里我通過(guò)moveTo的方法繪制了第一個(gè)點(diǎn),這個(gè)必須使用moveTo,因?yàn)槿绻皇褂眠@個(gè)這個(gè)點(diǎn)將會(huì)在(0,0)開(kāi)始,最后我們回去到xy點(diǎn)作為控制點(diǎn),最后使用返回 真的方式讓ACTION_MOVE,ACTION_UP事件往這個(gè)控件繼續(xù)傳遞事件。

再來(lái)看當(dāng)觸發(fā)ACTION_MOVE時(shí),因?yàn)樨惾麪柷€是由線段構(gòu)成的,結(jié)束點(diǎn)時(shí)在線段的中間的位置,所以這里的計(jì)算方法是(起點(diǎn)+最后的點(diǎn))/2就可以得到中間的點(diǎn).

使用方式:

<com.campus.shopping.drawtext.finger android:id="@+id/viewmy" android:layout_width="fill_parent" android:layout_height="fill_parent" />

感謝各位的閱讀!關(guān)于“Android如何自定義視圖實(shí)現(xiàn)手指移動(dòng)軌跡”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)頁(yè)題目:Android如何自定義視圖實(shí)現(xiàn)手指移動(dòng)軌跡
網(wǎng)站地址:http://muchs.cn/article14/pdgcge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、響應(yīng)式網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)用戶體驗(yàn)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)