java.lang.IndexOutOfBoundsException and drawPosText

简介: package com.example.canvastest;import android.content.Context;import android.
img_4ef1fe0f3ef768e511d9d4ed81a03571.png
package com.example.canvastest;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by 700 on 2018/7/31.
 */

public class DrawText_DrawPosText extends View{

    private Paint mTextPaint;
    private float[] offset = new float[10];

    public DrawText_DrawPosText(Context context, AttributeSet attrs,
                        int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public DrawText_DrawPosText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public DrawText_DrawPosText(Context context) {
        super(context);
    }

    private void initView(){
        for(int i = 0; i<10; i+=2){
            offset[i] = 100;
            offset[i+1] = 250+150*i/2;
        }
        mTextPaint = new Paint();
        mTextPaint.setColor(getResources().getColor(
                android.R.color.holo_blue_light
        ));
        mTextPaint.setTextSize(20);//设置文字大小
//        mTextPaint.setTextAlign(Paint.Align.CENTER);//设置居中
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        initView();
        canvas.drawText("hehehehehedadadadadadadada",100,100,mTextPaint);
        canvas.drawPosText("hehehehehedadadadadadadada",offset,mTextPaint);

    }
}

郁闷。。报错的原因是数组超范围了。。
还以为是for语句写错了,看了半天。。。没错啊。。。

后来聚焦在了drawPosText()上面,觉得不太对劲,看了下源码,额。。。。。。,


img_da495b464b3cfb0e23bcc758d99fc656.png

意思是干嘛呢,drawPosText()不是第一个参数是字符串嘛,drawPosText()这个方法就是把这个字符串拆成一个一个字符,按顺序对应好第二个参数的位置放好。。。,也就是说我第二个参数offset这个数组长度是10,即包含着五个xy坐标对,只能描述五个位置,所以第一个参数只能是一个五字符的字符串,不然就跟数组不匹配,便会报错了。。。

喏,第一个参数改成是一个五字符的字符串:

img_7edd5ebee367f3cb2fcdb899568a0042.png

也便成功运行了:
img_d65b88378cc8e1d198adacd83330df71.png

目录
相关文章
|
Java Spring
【Java异常】java.lang.ClassCastException: java.io.NotSerializableException cannot be cast to java.lang.S
【Java异常】java.lang.ClassCastException: java.io.NotSerializableException cannot be cast to java.lang.S
83 0
|
2月前
|
Java 索引
Java“ExceptionInInitializerError”解决
Java中遇到“ExceptionInInitializerError”错误通常是因为静态初始化块或静态变量初始化时发生异常。解决方法包括检查静态代码块中的逻辑错误、确保资源正确加载以及处理可能的空指针异常。
360 8
|
8月前
解决java.lang.ClassCastException
解决java.lang.ClassCastException
88 1
|
2月前
|
存储 Java 数据库
Java “ClassCastException”解决
Java中的“ClassCastException”是在运行时尝试将对象强制转换为与其实际类型不兼容的类型时引发的异常。解决方法包括:1. 检查类型转换前使用`instanceof`关键字进行类型判断;2. 确保对象的实际类型与目标类型一致;3. 审查代码逻辑,避免不必要的类型转换。
194 4
|
2月前
|
Java
Java“NumberFormatException”解决
当尝试将字符串转换为数字时,若字符串格式不正确,则会抛出“NumberFormatException”。解决方法:1. 检查字符串是否为空或仅包含空白字符;2. 确保字符串中的字符都是数字;3. 使用异常处理捕获并处理该异常。
79 0
|
6月前
|
Java 测试技术
【Java】已解决java.lang.UnsupportedOperationException异常
【Java】已解决java.lang.UnsupportedOperationException异常
356 0
|
6月前
|
Java API
【Java】已解决java.lang.NoSuchMethodException异常
【Java】已解决java.lang.NoSuchMethodException异常
483 0
|
6月前
|
安全 Java API
【Java】已解决java.lang.SecurityException异常
【Java】已解决java.lang.SecurityException异常
842 0
|
6月前
|
IDE Java 应用服务中间件
【Java】已解决java.lang.ClassNotFoundException异常
【Java】已解决java.lang.ClassNotFoundException异常
1167 0
|
6月前
|
Java 测试技术
【Java】已解决java.lang.NullPointerException异常
【Java】已解决java.lang.NullPointerException异常
865 0