android画笔移位解决
16lz
2021-01-26
android画笔移位解决
- 问题描述
- 画笔的触点和画板的上的图不是吻合的:触点和实际的线条之间存在距离
- 图示
- 问题出现的原因
- 控件的大小和图片的大小不吻合
- 图示
- 解决方案
- 当onCreate方法执行完后,获取控件的width和height属性
- 然后设置给画布的width和height
-
实际操作的关键代码
-
布局设置(内容填充控件)
-
关键代码【代码为主要代码,有错误的地方为全局变量,这里没做粘贴】
LinearLayout lll_img = (LinearLayout) this.findViewById(R.id.lll_img);// 线性布局控件ViewTreeObserver vto = lll_img.getViewTreeObserver();vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { lll_img.getViewTreeObserver() .removeGlobalOnLayoutListener(this); // 获取线性布局控件的高 height = lll_img.getHeight(); // 获取线性布局控件的宽 width = lll_img.getWidth(); // 将画布的宽高和控件的宽高设置成一样的 baseBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); // 创建一张画布 canvas = new Canvas(baseBitmap);// 画布和位图绑定--相当于实时显示 // 画布背景为白色 canvas.drawColor(Color.WHITE); // 创建画笔 paint = new Paint(); // 设置防止锯齿 paint.setAntiAlias(true); // 画笔颜色为红色 paint.setColor(Color.BLACK); // 宽度5个像素 paint.setStrokeWidth(WIDTH); // 接缝处圆滑 paint.setStrokeCap(Paint.Cap.ROUND); paint.setStrokeJoin(Paint.Join.ROUND); // 先将白色背景画上--Matrix用于在绘制位图时转换的矩阵 canvas.drawBitmap(baseBitmap, new Matrix(), paint); huabu.setImageBitmap(baseBitmap); }});
-
补充
- 其他的解决方案
- 自己测量,丰衣足食【这种方案亲自测试,但不如所愿,这里仅做参考】
int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); imageView.measure(w,h); int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth();
- 监听回调
ViewTreeObserver vto = imageView.getViewTreeObserver();vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { vto.removeOnPreDrawListener(this); int height = imageView.getMeasuredHeight(); int width = imageView.getMeasuredWidth(); return true; }});
- 自己测量,丰衣足食【这种方案亲自测试,但不如所愿,这里仅做参考】
更多相关文章
- 利用Canvas实现在屏幕随机位置绘制10个大小(边长为10-160)颜色随
- Android软键盘(三)自动弹出键盘的现象
- Android(安卓)Spinner控件
- Android学习笔记之界面控件大小dip及布局管理器嵌套使用
- Android自定义控件(一)——抽奖刮刮乐的实现
- android中如何让一个不知道高度的控件正好恰在上下两个控件之中
- Android自定义标签列表控件LabelsView解析
- Android墨迹3.0特性介绍效果实现——做一个垂直滚动的Layout
- android Activity布局初步(三)- 相对布局