私の Android アプリでは、GridView に写真を表示します。これらの写真を GridView に読み込む前に重い処理を行うため、onConfigurationChanged() メソッドをオーバーライドして構成の変更を自分で処理することにしました。このメソッドは、GridView の列数のみを変更し、アダプターを再割り当てします。デバイスを横向きから縦向きに切り替えると、すべてが完全に機能し、予想どおり、画像が列全体のスペースを占めます。しかし、デバイスを縦向きから横向きに切り替えると、GridView 内の画像の幅が必要以上に小さくなります。Glide ライブラリを使用して、写真を GridView に読み込みます。
これを解決するにはどうすればよいですか?
私のコードは次のとおりです。
public class PhotosAdapter extends BaseAdapter {
private ArrayList<String> images;
public PhotosAdapter(ArrayList<String> images) {
this.images = images;
}
@Override
public int getCount() {
return images.size();
}
@Override
public Object getItem(int position) {
return images.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row == null) {
//No tenemos vista reciclada, la creamos
row = getLayoutInflater().inflate(R.layout.grid_row, parent, false);
}
TickedImageView thumbV = (TickedImageView) row.findViewById(R.id.thumb);
int screenWidth = getResources().getDisplayMetrics().widthPixels;
int numberOfColumns = Utils.landscape(PhotosActivity.this) ? 5 : 3;
int width = screenWidth / numberOfColumns;
thumbV.setDrawingWidth(width);
//Por si la TickedImageView fue reciclada, la desmarcamos
thumbV.setSelected(selectedPaths.contains(images.get(position)));
thumbV.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TickedImageView view = (TickedImageView) v;
if (view.isSelected())
selectedPaths.add(images.get(position));
else
selectedPaths.remove(images.get(position));
}
});
//Cargamos la imagen
Glide.with(PhotosActivity.this)
.load(new File(images.get(position)))
.centerCrop()
.into(thumbV);
Log.d("TAG", images.get(position));
return row;
}
public void removeImage(String image) {
images.remove(image);
}
public String getImage(int position) {
return images.get(position);
}
}