91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android如何自定義視圖實現手指移動軌跡

發布時間:2021-09-27 13:48:21 來源:億速云 閱讀:204 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關Android如何自定義視圖實現手指移動軌跡的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

一、什么是貝塞爾曲線

貝塞爾曲線(Bézier curve),又稱貝茲曲線或貝濟埃曲線,是應用于二維圖形應用程序的數學曲線。一般的矢量圖形軟件通過它來精確畫出曲線,貝茲曲線由線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種矢量曲線的。貝塞爾曲線是計算機圖形學中相當重要的參數曲線,在一些比較成熟的位圖軟件中也有貝塞爾曲線工具,如PhotoShop等。

二、貝塞爾曲線公式

三、手指軌跡原理

因為這個我們用的是自定義控件,所以我們創建一個finger的類集成View,重寫onDraw onTouchEvent這個兩個方法

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

其實手指軌跡的原理也很簡單,就是通過onTouchEvent來獲取道手指的位置,來繪制path路徑即可。

四、分析代碼

這里我先寫出全部的代碼,后面我再來一一分析代碼的作用:

全部代碼:

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); }

當手指按下觸發了ACTION_DOWN時,這里我通過moveTo的方法繪制了第一個點,這個必須使用moveTo,因為如果不使用這個這個點將會在(0,0)開始,最后我們回去到xy點作為控制點,最后使用返回 真的方式讓ACTION_MOVE,ACTION_UP事件往這個控件繼續傳遞事件。

再來看當觸發ACTION_MOVE時,因為貝塞爾曲線是由線段構成的,結束點時在線段的中間的位置,所以這里的計算方法是(起點+最后的點)/2就可以得到中間的點.

使用方式:

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

感謝各位的閱讀!關于“Android如何自定義視圖實現手指移動軌跡”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

无棣县| 清镇市| 修武县| 威海市| 乐至县| 汨罗市| 华安县| 通道| 民勤县| 蓬溪县| 铅山县| 英超| 社旗县| 闸北区| 兰西县| 施秉县| 大名县| 南澳县| 岚皋县| 壶关县| 荥阳市| 鲁甸县| 乌什县| 竹北市| 左云县| 定南县| 招远市| 茌平县| 汝南县| 顺昌县| 杭锦后旗| 临海市| 睢宁县| 屯留县| 岳普湖县| 武清区| 会泽县| 老河口市| 福建省| 股票| 白朗县|