studio programacion herramientas fundamentos con avanzado aplicaciones android view

programacion - manual de android en pdf



La vista personalizada no se dibujó correctamente (0)

Tengo una vista de indicador personalizado que he creado.

como puede ver en la primera imagen, todo se dibuja correctamente, pero a veces, cuando cierro la aplicación y la comienzo de nuevo, no se dibuja correctamente (la segunda imagen)

tratando de descubrir cuál podría ser la razón de esto. tal vez algo de almacenamiento en caché?

este es mi código onDraw :

@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); drawUnselected(canvas, mUnselectedPaint); drawSelected(canvas, mSelectedPaint); drawDone(canvas, mDonePaint); } private void drawDone(Canvas canvas, Paint mDonePaint) { for (Integer page : mDonePages) { canvas.drawBitmap(mDoneItemBitmap, dotCenterX[page], mDotTopY, mDonePaint); } } private void drawSelected(Canvas canvas, Paint mSelectedPaint) { float dist = ((mSelectedPaint.descent() + mSelectedPaint.ascent()) / 2); for (Integer page : mSelectedPages) { canvas.drawBitmap(mSelectedItemBitmap, dotCenterX[page], mDotTopY, mSelectedPaint); canvas.drawText("" + (page + 1), dotCenterX[page] + mDotRadius + dist, mDotTopY + mDotRadius - dist, mSelectedPaint); } } private void drawUnselected(Canvas canvas, Paint mUnselectedPaint) { int paddingTop = getPaddingTop(); for (int page = 0; page < mDotsNumber; page++) { Paint test = new Paint(); test.setColor(Color.BLACK); test.setStrokeWidth(30); canvas.drawBitmap(mUnSelectedItemBitmap, dotCenterX[page], mDotTopY, mUnselectedPaint); float dist = ((mNumbersPaint.descent() + mNumbersPaint.ascent()) / 2); canvas.drawText("" + (page + 1), dotCenterX[page] + mDotRadius + dist, mDotTopY + mDotRadius - dist, mNumbersPaint); if (page == mDotsNumber - 1) { //last page } else { canvas.drawLine(dotCenterX[page] + mDotDiameter - 2, mDotRadius + paddingTop, dotCenterX[page] + mDotDiameter + mDotGap + 1, mDotRadius + paddingTop, mUnselectedPaint); } } }