Всем привет! Вот уже пару дней не могу решить на первый взгляд простую проблему. Я пишу простую галерею. В качестве базового компоновщика я взял HorizontalScrollView, в который вложен LinearLayout, вот код main layout'a: | Код | <HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/horizontalScrollView" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:orientation="horizontal" android:id="@+id/mainLayout" android:fillViewport="true" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="match_parent"/> </HorizontalScrollView>
|
Фото, масштабируя, я добавляю программно: | Код | public void setViewList(Integer linearLayoutId, Integer[] imageIdList, Activity activity) {
displayMetrics = ImageUtils.getDisplayMetric(activity);
LinearLayout ll = (LinearLayout) findViewById(linearLayoutId); for (Integer imgId : imageIdList) { ImageView imageView = new ImageView(getContext());
imageView.setImageResource(imgId); imageView.setScaleType(ImageView.ScaleType.MATRIX);
Integer[] displayMetrics = ImageUtils.getDisplayMetric(activity); ImageUtils.scaleImage(imageView, displayMetrics[0], displayMetrics[1]);
Integer[] dstDimension = ImageUtils.createDimension(); ImageUtils.getImageSize(imageView, dstDimension); getImageSizeList().add(dstDimension);
ll.addView(imageView); }
}
|
Вот как выглядит код ImageUtils.scaleImage: | Код | public static void scaleImage(ImageView imView, int screenWidth, int screenHeight) { Drawable temp = imView.getDrawable();
Bitmap imBitmap = ((BitmapDrawable)temp).getBitmap();
int imWidth = imBitmap.getWidth(); int imHeight = imBitmap.getHeight();
float xScale = ((float) screenWidth) / imWidth; float yScale = ((float) screenHeight) / imHeight;
float scale = xScale <= yScale ? xScale : yScale; Matrix scaleMatrix = new Matrix(); scaleMatrix.postScale(scale, scale);
Bitmap scBitmap = Bitmap.createBitmap(imBitmap, 0, 0, imWidth, imHeight, scaleMatrix, true);
BitmapDrawable scDrBitmap = new BitmapDrawable(imView.getResources(), scBitmap); imView.setImageDrawable(scDrBitmap); imView.setAdjustViewBounds(true); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( scBitmap.getWidth(), scBitmap.getHeight() ); layoutParams.gravity = Gravity.CENTER;
imView.setLayoutParams(layoutParams); }
|
В итоге каждое изображение должно полностью заполнять экран по ширине, но при добавлении двух фото первое выводится не полностью, а на половину, за ним сразу же идёт второе (пример в прикреплённом файле). Почему так происходит, ума не приложу, так как каждое фото предварительно масштабируется на всю ширину экрана. Это сообщение отредактировал(а) rockitin - 21.12.2014, 17:34
|