android 利用path 實現手寫板的手寫效果
程式碼其實比較簡單,這種需求一般出現在相簿軟體裡面,可以讓使用者,觸控來在圖片上面寫字,畫圈圈之類的。反正就是記錄觸控軌跡吧。
public class TouchView extends View {
private float currentX;
private float currentY;
private Paint paint;
private Path path;
public TouchView(Context context) {
super(context);
}
public TouchView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public TouchView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public TouchView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(getResources().getDimension(R.dimen.paint_width));
paint.setStrokeCap(Paint.Cap.ROUND);
path = new Path();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
currentX = event.getX();
currentY = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(currentX, currentY);
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
path.lineTo(currentX, currentY);
break;
}
postInvalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(path, paint);
}
}
程式碼這就行了,比較簡單。效果類似下面這種:
不要在意圖片和大紅背景色
需要注意的地方:
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
path.moveTo(currentX, currentY); // 這裡是 moveTo
break;
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
path.lineTo(currentX, currentY); // 這裡是 lineTo
break;
}
沒有了。
相關文章
- Android手寫籤批功能實現(適配Android6Android
- 手寫一個ChatGPT打字效果ChatGPT
- 如何手寫實現 JSON ParserJSON
- 手寫IOC實現過程
- 手寫AOP實現過程
- JS手寫狀態管理的實現JS
- 對HashMap的思考及手寫實現HashMap
- 小程式實現手寫簽名
- 用原生js手寫實現promiseJSPromise
- canvas 塗鴉畫板,支援筆寫、手寫、滑鼠繪圖Canvas繪圖
- 純手寫實現JDK動態代理JDK
- 【肥朝】如何手寫實現簡易的Dubbo?
- 從零手寫實現 tomcat-03-基本的 socket 實現Tomcat
- 《四 spring原始碼》利用TransactionManager手寫spring的aopSpring原始碼
- 手寫call、apply、bind實現及詳解APP
- 手寫系列-實現一個鉑金段位的 ReactReact
- 手寫實現滿足 Promise/A+ 規範的 PromisePromise
- 自己動手寫Android資料庫框架Android資料庫框架
- 自己動手寫個 Android客戶端Android客戶端
- 關於利用go實現非同步讀寫的寫法分享Go非同步
- 手寫PromisePromise
- 手寫CountDownLatchCountDownLatch
- 手寫MVVMMVVM
- 手寫bind
- 手寫 PromisePromise
- 手寫axiosiOS
- 手寫 SpringSpring
- 手寫bootstorpboot
- 手寫new
- 手寫ajax
- 手寫 Hibernate ORM 框架 05-基本效果測試ORM框架
- 從零手寫實現 nginx-27-return 指令Nginx
- 手寫程式語言-實現運算子過載
- 動手編寫—動態陣列(Java實現)陣列Java
- 手寫演算法-python程式碼實現Kmeans演算法Python
- 一步一步實現手寫PromisePromise
- Tensorflow實現RNN(LSTM)手寫數字識別RNN
- ProxySQL實現Mysql讀寫分離 - 部署手冊MySql