How to get when an ImageView is completely loaded in Android
android, android-canvas, bitmap, imageview
Solution
Call `loadBitmapFromView` in a such way:
mImage.post(new Runnable() {
@Override
public void run() {
loadBitmapFromView(mImage);
}
});
`Runnable` provided to `post()` method will be executed after view measuring and layouting, so `getWidth()` and `getHeight()` will return actual width and height.
What else can you do, is measuring `View` manually, by invoking `measure`, and then taking result from `getMeasuredWidth()` and `getMeasuredHeight()`. But I do not recommend this way.
Problem
I'm developing an App which draws lines over a bunch of Images. To choose these images, I have a radio group and, whenever the user clicks in a radio button, the image is load with all its own drawings. In my radio listenner I have the following code: ``` bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y); mImage.setImageBitmap(bitmap); mImage.setDrawLines(true); mImage.setImageBitmap(loadBitmapFromView(mImage)); ``` the `decodeSampledBitmapFromResource` method I got from this link on android developers (it loads bitmaps more effitiently) http://developer.android.com/training/displaying-bitmaps/load-bitmap.html And here's the method I call to get a Bitmap of a View ``` public static Bitmap loadBitmapFromView(View v) { Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(b); v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); v.draw(c); return b; } ``` I'm setting the image Bitmap of `mImage` because I'm using ImageViewTouch library (which enables pinch zooming over an ImageView) and if I don't do it, all the canvas drawing is deleted with any interaction over the image (like zooming in/out). The error log is the following ``` 07-11 21:13:41.567: E/AndroidRuntime(20056): java.lang.IllegalArgumentException: width and height must be > 0 07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:638) 07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:620) ``` I'm almost sure that this error is occuring cause the image bitmap is not completely loaded when I call `getBitmapFromView` method. How can I know when the view is loaded completely?