java – 绘制/布局期间的对象分配?
发布时间:2020-12-14 05:41:35 所属栏目:Java 来源:网络整理
导读:我在绘制/布局期间得到3个对象分配的警告 super.onDraw(canvas);canvas.drawColor(Color.WHITE);Paint textPaint = new Paint();textPaint.setARGB(50,100,250);textPaint.setTextAlign(Align.CENTER);textPaint.setTextSize(50);textPaint.setTypeface(font
我在绘制/布局期间得到3个对象分配的警告
super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint textPaint = new Paint(); textPaint.setARGB(50,100,250); textPaint.setTextAlign(Align.CENTER); textPaint.setTextSize(50); textPaint.setTypeface(font); canvas.drawText("Logan is awesom",canvas.getWidth()/2,200,textPaint); canvas.drawBitmap(pBall,(canvas.getWidth()/2),changingY,null); if (changingY <canvas.getHeight()){ changingY += 10; }else{ changingY=0; } Rect middleRect = new Rect(); middleRect.set(0,400,canvas.getWidth(),550); Paint ourBlue = new Paint(); ourBlue.setColor(Color.BLUE); canvas.drawRect(middleRect,ourBlue); 我得到一个新的Rect()的错误; 确切的错误是避免绘制/布局操作期间的对象分配(预定位和重用) 解决方法
那么你的’错误’指出了确切的问题. onDraw()方法被OS多次调用,因此在这个函数内分配的东西是非常糟糕的主意.
您需要事先分配您的Rect和Paint,并在onDraw中使用它们 class YourClass extends View { Rect middleRect; Paint ourBlue; Paint textPaint; public YourClass() { //constructor init(); } private void init() { middleRect = new Rect(); ourBlue; = new Paint(); textPaint = new Paint(); ourBlue.setColor(Color.BLUE); textPaint.setARGB(50,250); textPaint.setTextAlign(Align.CENTER); textPaint.setTextSize(50); textPaint.setTypeface(font); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); canvas.drawText("Logan is awesom",textPaint); canvas.drawBitmap(pBall,null); if (changingY <canvas.getHeight()){ changingY += 10; }else{ changingY=0; } //if canvas size doesn't change - this can be moved to init() as well middleRect.set(0,550); canvas.drawRect(middleRect,ourBlue); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |