自定义View练习
来源:互联网 发布:递归编程n的阶乘 编辑:程序博客网 时间:2024/05/28 20:19
自定义View练习 - 手写板
练习来源
自定义控件-使用Canvas绘图定义一个手写板
效果图
主要代码
WriteView.java
public class WriteView extends View { //画笔 private Paint paint; //用户触摸的路径 private Path path; public WriteView(Context context) { this(context, null); } public WriteView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public WriteView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { paint = new Paint(); paint.setAntiAlias(true); //抗锯齿 paint.setDither(true); //防抖动 paint.setColor(Color.BLACK); paint.setStyle(Paint.Style.STROKE); paint.setStrokeJoin(Paint.Join.ROUND);//设置画笔连接处圆润 paint.setStrokeWidth(10f);//画笔大小 path = new Path(); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: path.moveTo(x,y); return true; case MotionEvent.ACTION_MOVE: path.lineTo(x,y); break; case MotionEvent.ACTION_UP: break; } postInvalidate();//重绘 return false; } @Override protected void onDraw(Canvas canvas) { canvas.drawPath(path,paint); //绘制路径 } /** * 清空路径 */ public void reset(){ path.reset(); postInvalidate(); }}
学习知识
- 将用户Touch的轨迹存储到Path中. 使用drawPath()来实时绘制.
- 调用postInvalidate()会进而一步一步的调用的View#onDraw().
- 在View#onTouchEvent()中MotionEvent.Action_DOWN事件中一定要返回true, 表示接下来的Move,Up事件都有当前View来消费.
- 清空画布,只需将path清空,重新绘制即可.
- 使用AndroidStudio快速生成自定义View的构造方法的快捷输入为ViewConstructors.
github: https://github.com/cizkey/CustomPractice/tree/master/WriteView
阅读全文
0 0
- 自定义View小练习
- 自定义View练习
- 自定义View练习
- 自定义View练习
- 自定义View练习
- 自定义View练习
- 自定义View练习一
- 自定义view-canvas练习
- 自定义View练习1
- 自定义View练习2
- android自定义View练习之波浪View
- Android 自定义View练习之水波纹
- 自定义 view 练习(2):卫星式菜单
- 自定义View练习(一)饼状图
- 自定义View练习(二)二阶贝塞尔曲线
- HenCoder 自定义 View 1-1 练习项目
- 新手自定义view练习实例之(二) 波浪view
- 自定义View练习(一个自定义的折线图)
- JSON相关知识点
- 【推荐】文本处理的卷积方法
- Spring中Quartz的配置
- Window一本满足
- webstorm 2017 激活破解
- 自定义View练习
- laravel中间件
- jdk7中Arrays.sort()和Collections.sort()排序方法使用注意
- 正则表达式用于模式匹配的String方法
- Android 控件之间的冲突
- 【学习】QA相关资源/数据集/论文列表
- 双机高可用、负载均衡、MySQL (读写分离、主从自动切换)架构设计
- 线程的锁函数:threading.Lock() 返回锁对象 Lock
- html5 localstorage结合vue开发本地记事本项目源码