El elemento de lista (una vista) cambia de orden sin que suceda mientras se desplaza (rápido) en un ListView
Soy nuevo en android, y terminé (tengo que) hacer una pregunta aquí,
Vamos a hacerlo simple, simplemente quiero hacer mi propio TextView-like (MyView extends View),
- No se puede emitir a la clase ViewPager personalizada
- Cómo obtener el índice de una vista particular (personalizada) de ViewGroup (FrameLayout) después de hacer onLongClick en la vista
- Nueve parches en un grupo de vistas personalizado
- Android: cómo crear una instancia de mi vista personalizada con construtor de atributos
- Desarrollo de Android: los botones reaccionan lentamente
Este es mi código
public class MyView extends View { private Paint mPaint; private String mText; private Bitmap mBitmap1; private Bitmap mBitmap2; public MyView(Context context) { super(context); initView(); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); initView(); } private final void initView() { mPaint = new Paint(); } public void setText(String text) { mText = text; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int measuredWidth = measureWidth(widthMeasureSpec); if (mBitmap1 == null) initBitmap1(measuredWidth); int measuredHeight = measureHeight(heightMeasureSpec); setMeasuredDimension(measuredWidth, measuredHeight); } private void initBitmap1(int measuredWidth) { mBitmap1 = Bitmap.createBitmap(measuredWidth, Fonts.getHeight(), Bitmap.Config.ARGB_4444); Canvas canvas = new Canvas(mBitmap1 ); canvas.drawText(mText, 0, 0, mPaint); } private void initBitmap2() { mBitmap2 = Bitmap.createBitmap(30, Fonts.getHeight(), Bitmap.Config.ARGB_4444); Canvas canvas = new Canvas(mBitmap2); canvas.drawText(mText, 0, 0, mPaint); } private int measureWidth(int widthMeasureSpec) { int measuredWidth = 0; int specWidthMode = MeasureSpec.getMode(widthMeasureSpec); int specWidthSize = MeasureSpec.getSize(widthMeasureSpec); if (specWidthMode == MeasureSpec.EXACTLY) { measuredWidth = specWidthSize; } else { measuredWidth = getWidth(); if (specWidthMode == MeasureSpec.AT_MOST) { measuredWidth = Math.min(measuredWidth, specWidthSize); } } return measuredWidth; } private int measureHeight(int heightMeasureSpec) { int measuredHeight = 0; int specHeightMode = MeasureSpec.getMode(heightMeasureSpec); int specHeightSize = MeasureSpec.getSize(heightMeasureSpec); if (specHeightMode == MeasureSpec.EXACTLY) { measuredHeight = specHeightSize; } else { measuredHeight = 80; if (specHeightMode == MeasureSpec.AT_MOST) { measuredHeight = Math.min(measuredHeight, specHeightSize); } } return measuredHeight; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawBitmap(mBitmap1, getLeft(), 0, mPaint); initBitmap2(); canvas.drawBitmap(mBitmap2, getLeft(), 30, mPaint); }
}
En mi código, i poblar algunos números de MyView (digamos 20) en un ListActivity
Mi pregunta es la razón por la orden de mBitmap1 cambia al azar mientras me desplazo (arriba hacia abajo) rápidamente (si me desplazo lentamente, este problema no ocurre) ..?
MBitmap2 se queda donde deberían estar ..
- ¿Cómo crear una vista personalizada simple?
- Android Deslizante Vista
- Vista de notificaciones personalizadas
- Vista personalizada de Android Vuelta de memoria de mapa de bits
- Cómo obtener el contexto MainActivity en la clase CustomView
- Android onDraw () ejecutándose en todas las vistas?
- Pase Android NestedScrollView desplazamientos horizontales a un padre Ver
- Creación de CustomViews como un componente modular y reutilizable que se puede utilizar en todos los proyectos
Debe utilizar una clase de tenedor de vista para superar este problema. algo como esto:
public View getView(final int i, View view, final ViewGroup viewGroup) { View vi = view; final ViewHolder holder; if (view == null) { holder = new ViewHolder(); vi = inflater.inflate(R.layout.listview_row_cart, null); holder.yourbutton = (Button) vi.findViewById(R.id.btn); vi.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } holder.yourbutton.setText("Start"); } class ViewHolder { Button yourbutton }
- Cómo enviar un SMS en Android Kitkat desde la aplicación no predeterminada sin escribir a SMS Provider
- Android emparejando dispositivos bluetooth sin diálogo con pin