¿Asignación de objetos durante el dibujo / diseño?

Tengo 3 de advertencia para la asignación de objetos durante el sorteo / diseño

super.onDraw(canvas); canvas.drawColor(Color.WHITE); Paint textPaint = new Paint(); textPaint.setARGB(50,100,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); 

Recibo un error en el nuevo Rect (); Y en ambos nuevos Paint ();

El error exacto es evitar la asignación de objetos durante las operaciones de dibujo / trazado (prelocación y reutilización)

Bueno, su 'error' apunta al problema exacto. onDraw() método es llamado por OS muchas, muchas veces, por lo tanto, la asignación de algo dentro de esta función es muy mala idea. Necesitas asignar tu Rect y Paint antemano y solo usarlos dentro de 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,100,100,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",canvas.getWidth()/2,200,textPaint); canvas.drawBitmap(pBall, (canvas.getWidth()/2), changingY, 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, 400, canvas.getWidth(), 550); canvas.drawRect(middleRect, ourBlue); } } 

Para mí, tengo este error en el diseño, especialmente cuando se utiliza metrices de visualización.

He utilizado esta imagen:

  <com.steve.thirdparty.ScalableImageView android:id="@+id/iv_posted_img_home" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="fitXY" android:background="@drawable/golive_load_image" android:layout_below="@+id/tv_user_posted_msg_post_items_home" android:contentDescription="@string/cont_desc"/> 

ScalableImageView.java:

Import static com.steve.TabHomeActivity.displaymetrics;

 public class ScalableImageView extends ImageView { ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); } 

Solucioné este problema agregando el static DisplayMetrices en el método onCreate () en Activity.

TabHomeActivity.java:

 public static DisplayMetrics displaymetrics; *inside onCreate()* displaymetrics = new DisplayMetrics(); 

Evitar la asignación de objetos durante las operaciones de dibujo / diseño (prelocalización y reutilización)

El mensaje te da una solución en el plato, así que no entiendo cuál es tu pregunta.

Tienes que mover la creación de nuevos objetos al método onCreate, para que se creen una sola vez y usarlos más adelante en el método onDraw.

  • Cómo crear AsyncTasks reutilizables en android?
  • Android TabView error?
  • Uso de la gramática JSGF en lugar del modelo de lenguaje DMP (use -jsgf en lugar de -lm) en CMU Sphinx (pocketsphinx)
  • Configuración de la codificación para una entidad multiparte
  • No se puede realizar la comprobación de instancia contra el tipo parametrizado ArrayList <Foo>
  • "R no se puede resolver a una variable" justo después de crear el proyecto android?
  • Android ListView personalizado no puede hacer clic en los elementos
  • Tamaño de marcador de posición de Android Glide
  • Cómo seleccionar y recortar una imagen en android?
  • Android - Crossfade mutiple imágenes en un ImageView
  • Java: Cómo compartir código de aplicación / UI común entre varias aplicaciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.