Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿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 ();

  • Android Studio - EXCEPCION INESPERADA DE NIVEL SUPERIOR:
  • Proguard retrace la confusión de salida
  • Uso de OpenGL para reemplazar Canvas - Android
  • Manejo del botón de retroceso en React Native, Navigator en Android
  • ¿Cómo configuro IntelliJ IDEA para aplicaciones de Android?
  • Spinner con una selección predeterminada vacía
  • El error exacto es evitar la asignación de objetos durante las operaciones de dibujo / trazado (prelocación y reutilización)

  • ¿Por qué tenemos que llamar a super en Android a veces?
  • Diferencia entre setTextAppearance de código vs. recurso
  • Cámara androide estirada en modo horizontal
  • Java.lang.ClassNotFoundException: org.postgresql.Driver, Android
  • Eliminar icono / logotipo de la barra de acción de android
  • No se puede resolver ContextCompat en Android
  • 3 Solutions collect form web for “¿Asignación de objetos durante el dibujo / diseño?”

    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.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.