本文主要是介绍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;}@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap = ImageAppUtil.getImageBitmap(context, url);return bitmap;}@Overrideprotected 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来设置。因瓦的项目此方法在很多地方调用,又赖于新建方法。
这篇关于Android开发网络图片完整显示且不拉伸的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!