Android觸控事件實現筆觸畫布

2021-08-30 11:41:28 字數 3378 閱讀 9558

任何view都有觸控事件,經常在自定義控制項時重寫setontouchlistener

本篇通過手繪來講述這個知識點

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

直線曲線

筆觸

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

//建立乙個和螢幕一樣大的bitmap

bitmap 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) -> 

return true;

});}

公升級版:lever2

});再公升級版:lever3

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

private long lasttimestamp = 0l;//最後一次的時間戳

midivshow.setontouchlistener((view, event) -> 

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.其中可以改變求寬度的等式實現不同的筆觸:如

2.在上繪畫

//原型

bitmap bitmap = bitmapfactory.decoderesource(getresources(), r.mipmap.iv_500x400);

//副本

bitmap mnewbitmap = bitmap.createbitmap(bitmap.getwidth(), bitmap.getheight(), bitmap.getconfig());

//用副本生成canvas

mcanvas = 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"));

//設定副本到imageview

拓展2.png

後記:捷文規範

1.本文成長記錄及勘誤表

專案原始碼

日期備註

v0.1--無

2018-10-30

android觸控事件實現筆觸畫布

2.更多關於我

筆名qq

愛好張風捷特烈

1981462002

zdl1994328

語言我的github

我的csdn

個人**

3.宣告

android觸控語音事件

android中的各種事件是由各種不同的 來完成,比如按鍵事件是由onclicklistener實現監聽,觸控是由ontouchlistener實現監聽的。首先設定監聽,然後傳入要監聽的事件 public class touch913mainactivity extends activity tv....

關於android 的觸控事件

android 觸控motionevent 事件 motionevent 事件物件 一般情況下是在view 的ontouchevent 方法中處理motionevent 事件物件的 1 首先需要獲事件的型別 可以通過getaction android2.2之後加入多點觸控支援後 使用getactio...

Android觸控事件部分細節

今天,用到了乙個可在水平方向滑動listview的item的控制項,是github上的開源控制項,但是用起來總感覺不太好用,水平滑時有時滑不動,因為listview本身是有上下滑動功能的,當我們的手在滑動的時候,水平滑動的同時也有垂直滑動,如果垂直滑動的距離大於水平滑動的距離,則listview會把...