android画笔移位解决

  • 问题描述
    • 画笔的触点和画板的上的图不是吻合的:触点和实际的线条之间存在距离
    • 图示
  • 问题出现的原因
    • 控件的大小和图片的大小不吻合
    • 图示
  • 解决方案
    1. 当onCreate方法执行完后,获取控件的width和height属性
    2. 然后设置给画布的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);    }});

补充

  • 其他的解决方案
    1. 自己测量,丰衣足食【这种方案亲自测试,但不如所愿,这里仅做参考】

      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();  
    2. 监听回调

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

更多相关文章

  1. 利用Canvas实现在屏幕随机位置绘制10个大小(边长为10-160)颜色随
  2. Android软键盘(三)自动弹出键盘的现象
  3. Android(安卓)Spinner控件
  4. Android学习笔记之界面控件大小dip及布局管理器嵌套使用
  5. Android自定义控件(一)——抽奖刮刮乐的实现
  6. android中如何让一个不知道高度的控件正好恰在上下两个控件之中
  7. Android自定义标签列表控件LabelsView解析
  8. Android墨迹3.0特性介绍效果实现——做一个垂直滚动的Layout
  9. android Activity布局初步(三)- 相对布局

随机推荐

  1. 【原创】Android锁定横竖屏、splash,全屏
  2. Android(安卓)4.0 Launcher2源码分析——
  3. 开源 Android(安卓)开发平台 Rexsee 开发
  4. Android(安卓)7.1 车机 Android(安卓)系
  5. Android防止内存溢出浅析
  6. 华软项目总结
  7. Galaxy Nexus 和 Android(安卓)Ice Cream
  8. Android主流三方库源码分析(四、深入理解G
  9. 服务(Service)
  10. ym——安卓巴士总结了近百个Android优秀