Xamarin image download and resizing for Android
WebClient.DownloadData is a blocking method; you should use DownloadDataTaskAsync. Network I/O is almost certainly the slowest part of the whole operation, so it's important that we're not blocking here. You might also want to consider using the newer HttpClient instead of WebClient.

The third parameter of DecodeByteArrayAsync is the length of the array, but you're passing it imagesBytes.Length - 1. I think you want to pass it imageBytes.Length instead.

There's no need to set imageBytes to null.

I don't really like that LoadScaledDownBitmapForDisplayAsync modifies the options parameter. Since the method is private it's not that important, but it is, to me, surprising behaviour. To avoid this, I would consider merging GetBitmapOptionsOfImageAsync and LoadScaledDownBitmapForDisplayAsync into one method, e.g:

public static async Task&lt;Bitmap&gt; DecodeByteArrayAsync(byte[] imageBytes, int requiredWidth, int requiredHeight)
{
    var options = new Options { InJustDecodeBounds = true };
    await BitmapFactory.DecodeByteArrayAsync(imageBytes, 0, imageBytes.Length, options);

    options.InSampleSize = CalculateInSampleSize(options, requiredWidth, requiredHeight);
    options.InJustDecodeBounds = false;

    return await BitmapFactory.DecodeByteArrayAsync(imageBytes, 0, imageBytes.Length, options);
}