Android開發網路圖片完整顯示且不拉伸
阿新 • • 發佈:2019-02-15
需求:由上往下載入多張網路圖片,滿橫屏完整顯示且不拉伸。
這裡有幾個問題要解決的,一個是網路圖片,一個是完整顯示,一個是圖片不能出現拉伸問題。
解決思路:不拉伸完整顯示只有等比例縮放圖片,ImageView.ScaleType.CENTER_CROP符合,需求中滿橫屏很關鍵,那就只有高度不知道了,有已知求未知即可,sw/sh=iw/ih。奇葩的是瓦專案中伺服器不返回圖片的真實寬高,這又要多一步操作了,先下載生bitmap物件,從中獲取圖片的寬高來設定imageview的寬高。多張圖片也就是不固定數量,所以得動態建立imageview控制元件,這不難。
關鍵程式碼:
迴圈圖片地址
llImagesDetail.removeAllViews(); //防止重複新增
for (int i = 0; i < goodsImagesResult.getList().size(); i++) {
bitmapTask = new BitmapTask(mContext, goodsImagesResult.getList().get(i).getImg());
bitmapTask.execute();
}
生成bitmap的任務
/** * 獲取網路圖片bitmap任務 */ private class BitmapTask extends AsyncTask<String, Integer, Bitmap> { private Context context; private String url; public BitmapTask(Context context, String url) { this.context = context; this.url = url; } @Override protected Bitmap doInBackground(String... params) { Bitmap bitmap = ImageAppUtil.getImageBitmap(context, url); return bitmap; } @Override protected void onPostExecute(Bitmap bitmap) { ImageView imageView = new ImageView(context); ImageAppUtil.setSelfImage(context, imageView, url, bitmap.getWidth(), bitmap.getHeight()); llImagesDetail.addView(imageView); } }
設定動態生成imageview的寬高
程式碼基本在這裡了,不難。其實最後不用再用圖片url去設定imageview的圖片了,可以直接用之前生成的bitmap來設定。因瓦的專案此方法在很多地方呼叫,又賴於新建方法。/** * 圖片完整顯示自適應螢幕,寬佔滿 * @param imageView * @param url * @param imageWidth * @param imageHeight */ public static void setSelfImage(Context context, ImageView imageView, String url, int imageWidth, int imageHeight){ //做圖片適配 int screenWidth = (int) Utils.getScreenWidthPx(context); LinearLayout.LayoutParams imageParams = new LinearLayout.LayoutParams(screenWidth, (int) (screenWidth * imageHeight / imageWidth)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(imageParams); ImageLoaderUtil.load(imageView, url, context); }