1. 程式人生 > >Android開發網路圖片完整顯示且不拉伸

Android開發網路圖片完整顯示且不拉伸

      需求:由上往下載入多張網路圖片,滿橫屏完整顯示且不拉伸。

      這裡有幾個問題要解決的,一個是網路圖片,一個是完整顯示,一個是圖片不能出現拉伸問題。

      解決思路:不拉伸完整顯示只有等比例縮放圖片,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的寬高
/**
     * 圖片完整顯示自適應螢幕,寬佔滿
     * @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);
    }
           程式碼基本在這裡了,不難。其實最後不用再用圖片url去設定imageview的圖片了,可以直接用之前生成的bitmap來設定。因瓦的專案此方法在很多地方呼叫,又賴於新建方法。