I'm new to android, and in the end I had to ask a question,
Let me make it simple, I just want to make my own TextView-like (MyView extends View)
this is my code:
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); }
}
in my code, I populate some MyView numbers (say 20) in ListActivity
My question is why the order of mBitmap1 changes randomly while I scroll (up and down) quickly (if I scroll slowly, this problem does not occur).?
mBitmap2 stays where they should be.
android listactivity
siriusdely
source share