¿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 ();
- Uso de Scala con Java en Android Studio
- Cómo detener ProGuard de eliminar la interfaz Serializable de una clase
- El uso de MultiDex en Android App ejecuta ProGuard dos veces y sólo segunda vez con Advertencias / Notas?
- No entiendo por qué se produce esta ClassCastException
- PDF Viewer API para android
El error exacto es evitar la asignación de objetos durante las operaciones de dibujo / trazado (prelocación y reutilización)
- Error "Paquete R no existe" al crear con Gradle desde la línea de comandos
- Objetivo-C a Java compilador cruzado
- Dispositivo Android que no recibe el paquete de multidifusión
- Google Volley subrayado en nombre de host
- ¿Puede detectar el ruido blanco mediante programación?
- CSVReader y InputStream
- Título de la barra de herramientas primera letra otro color
- ¿Hay una manera fácil de tener el aviso de derechos de autor añadido automáticamente por android studio?
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.
- Compile 'com.android.support:multidex:1.0.1' sucedió mal: todas las bibliotecas de soporte técnico de android deben usar la misma versión
- Cómo iniciar una actividad de una clase de hilo en android?