Android Cannas.drawTextView 方法坐标问题

  • 先看看我们把drawText方法里面x,y的位置设置为0的效果吧
canvas.drawText("哈哈哈", 0, 0, mPaint);

Android Cannas.drawTextView 方法坐标问题_第1张图片

  • 看到上面的图片了吧,是不是觉得很奇怪,为什么只显示字体的脚呢 ?
    • 我们输入的坐标0.0,是在控件的左上角,按我们之前对android坐标系的了解,大家是不是都觉的文字应该是在左上角从上到下的显示出来,而不是只显示在左上角的位置,其实这个跟基线有关系.

Android Cannas.drawTextView 方法坐标问题_第2张图片

  • 如果我们y坐标设置为0的话,那基线的位置就是在0,这样就会导致我们的文字只显示脚的问题了

Android Cannas.drawTextView 方法坐标问题_第3张图片

  • 我们现在就来让文字显示在控件的中间吧,要实现这个效果其实很简单,只要我们修改基线的位置就ok了,让文字居中有3中方式,其实都是差不多的,所以这里我就只讲解其中一种了
  • 思路:
    • 在Paint中我们可以获取到上图所有线的位置
    • 先计算出字体的总高度,其实就是Ascent 到 Descent 的位置了
    • 再用Ascent - 去字体高度的一半,就得到了我们要移动基线的距离了
private void initPaint() {        mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);        mPaint.setColor(Color.RED);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setTextSize(30);    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        String str = "哈哈哈";        //方式一        float textWidth = mPaint.measureText(str);  //获取文字的宽度        float x = (getMeasuredWidth() - textWidth) / 2; //x的位置        float y = getMeasuredHeight() / 2 +           (-mPaint.ascent() - (mPaint.descent() - mPaint.ascent()) / 2);        canvas.drawText(str, x, y, mPaint);    }

Android Cannas.drawTextView 方法坐标问题_第4张图片

更多相关文章

  1. Android基于OpenCV通过JNI识别并显示人脸位置
  2. Android RadioButton 图片位置和大小
  3. Android爬坑-悬浮窗显示位置问题
  4. Android GPS获得经纬度并得到该坐标精确地址
  5. [置顶] Android动态添加控件约束位置
  6. Android获取View位置getHitRect、getDrawingRect、getLocalVisib
  7. 基于百度地图的android地理位置获取
  8. Android 开机震动的调用位置以及打开关闭方法
  9. Android assets文件夹之位置放置和作用( AS 和eclipse中的 )

随机推荐

  1. android studio 更新 Gradle错误解决方法
  2. Android(安卓)网络请求的方式
  3. android 简单快速 倒计时动画
  4. 第15章 Android启动过程 [Android应用开
  5. 如果让我重新设计一款Android(安卓)App
  6. 在Android中自定义IOS风格的按钮
  7. Android中Local Service最本质的作用是什
  8. Android系统调试wifi总结
  9. android 出现gen already exists but is
  10. 设置activity为Dialog类型的设置