#android #android-gallery
#Android #android-галерея
Вопрос:
Я использую класс адаптера виджета галереи для отложенной загрузки изображений. Изображения, которые я получаю из веб-службы, имеют размер 640×431. Я хочу, чтобы изображения заполняли экран по ширине, сохраняя при этом одинаковое соотношение сторон независимо от высоты.
Я не уверен, как справиться с этим типом масштабирования.
Ниже приведен мой адаптер галереи:
public class GalleryImageAdapter extends BaseAdapter{
private Activity activity;
private ArrayList<String> listOfImages;
public ImageLoader imageLoader;
public GalleryImageAdapter(Activity a, ArrayList<String> listOfImages){
activity = a;
this.listOfImages = listOfImages;
imageLoader=new ImageLoader(activity.getApplicationContext());
}
@Override
public int getCount() {
return listOfImages.size();
}
@Override
public Object getItem(int position) {
return listOfImages.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.gallery_layout, null);
}
final String url = listOfImages.get(position);
ImageView galleryImage = (ImageView) v.findViewById(R.id.galleryImage);
imageLoader.DisplayImage(url, activity, galleryImage);
return v;
}
}
gallery_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@ id/galleryImage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="centerInside"/>
</LinearLayout>
Комментарии:
1. просто искал соответствующее руководство, оно помогло мне, проголосовало…
Ответ №1:
Если я правильно понимаю, вы хотите, чтобы текущее изображение занимало всю ширину виджета при отображении (при этом следующее и предыдущее изображения не видны, пока мы не прокручиваем по горизонтали), верно?
Вам необходимо установить параметры Layout для возвращаемого представления из getView()
метода вашего адаптера следующим образом:
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
// current code here ..
v.setLayoutParams(new Gallery.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));
return v;
}
Что касается ScaleType
на ImageView
, используйте centerInside
, если вы хотите, чтобы все изображение поместилось в пространстве, или используйте centerCrop
, если это нормально, чтобы обрезать его.
Комментарии:
1. Спасибо. Все изображения кажутся настолько размытыми, даже при высоком разрешении.
Ответ №2:
Вы можете установить высоту и ширину на fill_parent
, а затем использовать setScaleType
. Возможно, используйте ScaleType
CENTER_INSIDE
.
Комментарии:
1. это ничего не делает. Я должен упомянуть, что состояние изображений по умолчанию таково, что большие пальцы маленькие и расположены по центру, не заполняя ширину экрана. Кажется, что большие пальцы также перекрывают следующий.
2. Можете ли вы опубликовать содержимое
gallery_layout
?