1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網營銷解決方案
      Android如何自定義視圖實現手指移動軌跡

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

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

      一、什么是貝塞爾曲線

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

      二、貝塞爾曲線公式

      三、手指軌跡原理

      因為這個我們用的是自定義控件,所以我們創(chuàng)建一個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); }

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

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

      使用方式:

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


      文章名稱:Android如何自定義視圖實現手指移動軌跡
      路徑分享:http://www.ef60e0e.cn/article/pdgcge.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        太和县| 塔河县| 平利县| 岢岚县| 合阳县| 神农架林区| 东莞市| 肥城市| 阿拉善右旗| 和平县| 镇原县| 保山市| 蚌埠市| 新竹市| 松潘县| 青铜峡市| 新巴尔虎右旗| 乳山市| 惠州市| 杨浦区| 延安市| 武平县| 普定县| 星子县| 南充市| 合作市| 延安市| 九寨沟县| 乐平市| 锦州市| 凌源市| 普兰县| 德令哈市| 济源市| 宝应县| 陆良县| 霸州市| 葵青区| 汶上县| 柏乡县| 安乡县|