亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android觸摸事件如何實現筆觸畫布詳解

2019-10-21 21:36:30
字體:
來源:轉載
供稿:網友

前言

任何View都有觸摸事件,經常在自定義控件時重寫setOnTouchListener

本篇通過手繪圖片來講述這個知識點,下面話不多說了,來一起看看詳細的介紹吧

本篇分為三個等級:一覽圖:

直線

Android,觸摸事件,筆觸畫布

曲線 

Android,觸摸事件,筆觸畫布

筆觸

Android,觸摸事件,筆觸畫布

LEVEL1:基礎實現

在Activity中通過一個全屏的Bitmap創建的Canvas繪制

為ImageView添加觸摸事件監聽。

1.成員變量

ImageView mIdIvShow;float downX = 0;float downY = 0;float upX = 0;float upY = 0;private Canvas mCanvas;private Paint mPaint;

2.創建畫布

//獲取屏幕尺寸Point point = new Point();getWindowManager().getDefaultDisplay().getSize(point);//創建一個和屏幕一樣大的BitmapBitmap bitmap = Bitmap.createBitmap(point.x, point.y, Bitmap.Config.ARGB_8888);//創建Canvas對象mCanvas = new Canvas(bitmap);mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setStrokeWidth(10);mPaint.setColor(Color.RED);//將bitmap用ImageView展示mIdIvShow.setImageBitmap(bitmap);

3.監聽事件

 mIdIvShow.setOnTouchListener((v, event) -> {   switch (event.getAction()) {    case MotionEvent.ACTION_DOWN:     downX = event.getX();     downY = event.getY();     L.d("按下:(" + downX + "," + downY + ")" + L.l());     break;    case MotionEvent.ACTION_CANCEL:     break;    case MotionEvent.ACTION_MOVE:     break;    case MotionEvent.ACTION_UP:     upX = event.getX();     upY = event.getY();     L.d("抬起:(" + upX + "," + upY + ")" + L.l());     mCanvas.drawLine(downX, downY, upX, upY, mPaint);     mIdIvShow.invalidate();//更新視圖     break;   }   return true;  }); }

升級版:LEVER2

Android,觸摸事件,筆觸畫布

mIdIvShow.setOnTouchListener((v, event) -> { switch (event.getAction()) {  case MotionEvent.ACTION_DOWN:   downX = event.getX();   downY = event.getY();   break;  case MotionEvent.ACTION_CANCEL:   break;  case MotionEvent.ACTION_MOVE:   upX = event.getX();   upY = event.getY();   mCanvas.drawLine(downX, downY, upX, upY, mPaint);   mIdIvShow.invalidate();   //更新點位   downY = upY;   downX = upX;   break;  case MotionEvent.ACTION_UP:   //抬起點Y>1100,清除筆跡   if (upY > 1100) {    Paint paint = new Paint();    paint.setColor(Color.WHITE);    mCanvas.drawRect(0, 0, mPoint.x, mPoint.y, paint);   }   break; } return true;});

再升級版:LEVER3

筆觸根據繪制的速度動態改變畫筆粗細

Android,觸摸事件,筆觸畫布

float movingX = 0;float movingY = 0;private long lastTimestamp = 0L;//最后一次的時間戳
mIdIvShow.setOnTouchListener((view, event) -> { switch (event.getAction()) {  case MotionEvent.ACTION_DOWN:   lastTimestamp = System.currentTimeMillis();   downX = event.getX();   downY = event.getY();   break;  case MotionEvent.ACTION_CANCEL:   break;  case MotionEvent.ACTION_MOVE:   movingX = event.getX();   movingY = event.getY();   long curTimestamp = System.currentTimeMillis();   //計算時間差   long detaT = curTimestamp - lastTimestamp;   //計算距離差   float detaS = Logic.disPos2d(movingX, movingY, downX, downY);   //由于速度是 px/ms   double v = detaS / detaT;   //速度轉化為畫筆寬度的等式   float width = 14/(float)v;   L.d(width + L.l());   //限制極值情況   if ((width > 0) && width < 30) {    mPaint.setStrokeWidth(width);   }   mCanvas.drawLine(downX, downY, movingX, movingY, mPaint);   mIdIvShow.invalidate();   downX = movingX;   downY = movingY;   lastTimestamp = curTimestamp;//更新時間   movePos.add(new PointF(event.getX(), event.getY()));   break; } return true;});

拓展

1.其中可以改變求寬度的等式實現不同的筆觸:如

float width = (float) Math.log10(v) * 40;

Android,觸摸事件,筆觸畫布

2.在圖片上繪畫

//圖片原型Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.iv_500x400);//圖片副本Bitmap mNewBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());//用副本生成CanvasmCanvas = new Canvas(mNewBitmap);mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setStrokeCap(Paint.Cap.ROUND);//直線圓頭mCanvas.drawBitmap(bitmap, new Matrix(), mPaint);mPaint.setStrokeWidth(10);mPaint.setColor(Color.parseColor("#88164BE6"));//設置副本圖片到ImageViewmIdIvShow.setImageBitmap(mNewBitmap);

Android,觸摸事件,筆觸畫布

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久在线精品视频| 国产精品成人久久久久| 91视频国产一区| 另类视频在线观看| 91久久久久久久久| 97人人爽人人喊人人模波多| 欧美国产视频一区二区| 国产在线高清精品| 最近免费中文字幕视频2019| 日韩av电影在线免费播放| 最近的2019中文字幕免费一页| 国产美女精品免费电影| 国产精品成人av在线| 国产成人精品综合久久久| 国产精品第七十二页| 国产性猛交xxxx免费看久久| 亚洲日本中文字幕免费在线不卡| 欧美剧在线观看| 久久视频在线观看免费| 国产精品久久国产精品99gif| 欧美大全免费观看电视剧大泉洋| 国产日韩欧美电影在线观看| 国产精品久久久久久久app| 欧美精品免费在线| 国产精品人人做人人爽| 欧美日韩美女在线观看| 午夜免费久久久久| 欧美巨猛xxxx猛交黑人97人| 成人黄色免费网站在线观看| 538国产精品一区二区在线| 国产精品爽爽爽爽爽爽在线观看| 国产主播欧美精品| 欧美壮男野外gaytube| 久久躁日日躁aaaaxxxx| 久久av.com| 久久福利网址导航| 国产日韩中文字幕| 久久久噜噜噜久久久| 日韩精品一区二区视频| 欧美精品videosex牲欧美| 亚洲无限av看| 亚洲精品一区二区网址| 日韩美女av在线免费观看| 亚洲一区二区三区在线视频| 亚洲高清色综合| 欧美日韩色婷婷| 日本欧美国产在线| 亚洲人成网站色ww在线| 亚洲一区二区精品| 久久精品国产69国产精品亚洲| 亚洲精品国产综合久久| 色综合久久精品亚洲国产| 国产亚洲欧美视频| 欧美在线激情视频| 日韩av手机在线看| 久久精品中文字幕一区| 中文字幕在线看视频国产欧美| 国产va免费精品高清在线观看| 欧美视频专区一二在线观看| 久久国产天堂福利天堂| 中文字幕在线国产精品| 综合久久五月天| 午夜精品视频在线| 91精品国产91久久久久久久久| 日韩av电影中文字幕| 欧美日韩黄色大片| 欧美一区二三区| 日韩中文字幕国产精品| 欧洲精品毛片网站| 欧美性精品220| 久久精品中文字幕免费mv| 波霸ol色综合久久| 91性高湖久久久久久久久_久久99| 国产日韩在线精品av| 久久久久久久久久国产精品| 中文字幕成人精品久久不卡| 日韩精品中文字| 精品五月天久久| 欧美壮男野外gaytube| 91精品久久久久久久久中文字幕| 国产网站欧美日韩免费精品在线观看| 亚洲精品久久久久国产| 97超级碰碰碰久久久| 亚洲色在线视频| 亚洲激情成人网| 51视频国产精品一区二区| 欧美国产日韩一区二区三区| 欧美成人精品xxx| 国产精品精品一区二区三区午夜版| 欧美精品在线播放| 亚洲欧美自拍一区| 欧美性生交xxxxx久久久| 亚洲美女又黄又爽在线观看| 米奇精品一区二区三区在线观看| 欧美性视频精品| 国产日韩欧美91| 91精品视频网站| 美乳少妇欧美精品| 久久躁日日躁aaaaxxxx| 欧美夫妻性生活xx| 91在线观看欧美日韩| 欧美一区二区色| 精品网站999www| 成人综合网网址| 色综合久久天天综线观看| 精品久久香蕉国产线看观看gif| 欧美日韩国产激情| 亚洲电影免费在线观看| 欧美国产日韩xxxxx| 日韩欧美一区二区三区| 亚洲电影av在线| 日韩一区视频在线| 国产精品免费视频久久久| 国产精品久久久久久久一区探花| 欧美专区国产专区| 8x海外华人永久免费日韩内陆视频| 亚洲精品久久久久久下一站| 亚洲人成在线免费观看| 亚洲图片欧美午夜| 欧美老女人性生活| 97精品国产97久久久久久| 色悠久久久久综合先锋影音下载| 欧美激情亚洲另类| 91精品国产免费久久久久久| 欧美精品一二区| 国产亚洲a∨片在线观看| 国产精品91久久| 韩剧1988免费观看全集| 久久99国产综合精品女同| 亚洲视频第一页| 久久久久久久久久久av| 91久久嫩草影院一区二区| 一色桃子一区二区| 国产亚洲激情在线| 高清一区二区三区日本久| 日本最新高清不卡中文字幕| 精品国产电影一区| 国产成人精品av在线| www.国产精品一二区| 一区二区三区 在线观看视| 精品成人国产在线观看男人呻吟| 911国产网站尤物在线观看| 青青在线视频一区二区三区| 亚洲成av人片在线观看香蕉| 久久不射电影网| 色综合色综合久久综合频道88| 51精品在线观看| 欧美激情国产高清| 亚洲影视中文字幕| 欧美成aaa人片免费看| 亚洲国产美女久久久久| 亚洲国产成人爱av在线播放| 韩国19禁主播vip福利视频| 欧美午夜宅男影院在线观看| 91精品在线一区| 欧美国产日韩视频| 国产亚洲精品激情久久| 亚洲视频精品在线| 久久久国产一区二区三区| 欧美精品久久久久久久| 欧美丰满少妇xxxx| 插插插亚洲综合网| 精品一区二区电影| 亚洲激情中文字幕|