1

私の 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);
    }
}
4

2 に答える 2

2

この問題が発生している可能性があると思います。ImageView のサイズをmatch_parentXML に設定し、GridView の列数を設定してみてください。カスタムは必要ありませんdrawingWidth。残りは、GridView と Glide をレイアウトする Android レイアウト システムによって処理される必要があります。

ミニヒント:public String getItem共変の戻り値の型のおかげで、重複した を持たないことでメソッドが 1 つ減ったと言えますgetImage

于 2015-10-01T10:26:02.773 に答える