Parfois, nous devons montrer le premier réseau pour obtenir la largeur de l'image et la hauteur des contrôles d'image ne charge de traitement, par exemple pour l'affichage seulement une partie de l'image trop longtemps, après avoir cliqué sur pour afficher la carte entière, alors comment obtenir l'image de l'aspect réseau de celui-ci?
Un mode utilisant HttpURLConnection + BitmapFactory.Options
OOM causés par l'utilisation BitmapFactory.Options seule façon de décoder la frontière afin d'éviter toute l'image sera chargée dans les ressources mémoire et le résultat à obtenir trop de largeur et la hauteur de l'image
public static void getPicSize(String url, onPicListener listener) {
mPicFixThreadPool.execute(() -> {
HttpURLConnection connection;
try {
connection = (HttpURLConnection) new URL(url).openConnection();
InputStream inputStream = connection.getInputStream();
int[] imageSize = getImageSize(inputStream);
mMainHandler.post(() -> listener.onImageSize(imageSize[0], imageSize[1]));
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
});
}
private static int[] getImageSize(InputStream is) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
int[] size = new int[2];
size[0] = options.outWidth;
size[1] = options.outHeight;
LogUtil.i("--------------------width = " + size[0] + ",height = " + size[1]+"--------------------");
return size;
}
public interface onPicListener {
void onImageSize(int width, int height);
}
Deuxième façon, l'utilisation Glide
Glide.with(mContext).asBitmap().load(url).into(object : BitmapImageViewTarget(imageView) {
override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {
super.onResourceReady(resource, transition)
val width = resource.width
val height = resource.height
Log.i("kkk", "width = $width,height = $height")
}
})
trois façons
A ajouter ...