グリッドビューを実装しようとしていますが、次のようなグラフィカルビューがあります。私は様々なブログやS.Oの質問を行ってきました。残念ながら、特定のグリッドアイテムに行と列のスパンを提供できず、グリッドビューもこの機能をサポートしていません。 そして、私は、多くのデータがあり、パフォーマンスの問題を引き起こすため、間に他のビューを持つダイナミックスクロールビューを作成したくありません。 だからいずれかの提案があれば。返信してください 。 ありがとうございます。 行スパンと列スパンを含むカスタムグリッドビュー
答えて
スクロール可能なビューのパターンを繰り返しますか?より明確にするには、定期的に大きなスパンのグリッドアイテムを繰り返しますか?
リストビューを使用し、2つの通常ビューをリストビューの1つの行として「special_row」などのタグを使用して実装し、通常ビューを「normal行"。この要件に基づいて、行タグにアクセスして行をリサイクルすることができます。
EDIT:
私はアンドロイドのためのUIのようなPinterestのを実装したライブラリを見つけました。これには対称的なビューがあります。チェックアウトPinterestLisView。
EDIT:
Hereグリッド項目のcoulmnスパンと行スパンを指定することにより、別の興味深い手法です。私はthis questionから取った。列と行のスパンをプログラムで指定することで、グリッド項目の静的なxml宣言を取り除くことができると思います。
すべての問題の解決方法は次のとおりです。https://github.com/felipecsl/AsymmetricGridView ええ、私はこのようなクラスを持たないAndroidに疲れて、自分で書きました。 あなたにとって便利なことを願っています。
これは、2x2グリッドにまたがる特集項目を持つ3列グリッドの特定のソリューションです。
public class GridAdapter extends ArrayAdapter<GridAdapter.GridItem> {
public GridAdapter(Context context, int itemViewResId, List<String> things) {
super(context, itemViewResId, buildGridItems(things));
}
/**
* Assumes 3 column layout. A list of indices that shows a large
* item on the right of 1st row, then alternating on every 3rd row
* to the left and then right. The large item should occupy a 2x2 grid.
*
* X O O
* X O O
* X X X
* X X X
* O O X
* O O X
* X X X
* X X X
* X O O
* X O O
* X X X
*
* The indices where the large featured items are in item list is
* 1, 9, 19, 27, 37, 45, 55, ...
*/
protected static List<Integer> getFeaturedIndex(int total) {
int pos = 1;
ArrayList<Integer> index = new ArrayList<Integer>();
if (pos + 1 < total) {
index.add(pos);
}
for (int i = 0; pos < total; i++) {
int inc = i % 2 == 0 ? 8 : 10;
pos += inc;
if (pos + 1 < total) {
index.add(pos);
}
}
return index;
}
protected static List<GridItem> buildGridItems(List<String> things) {
ArrayList<GridItem> items = new ArrayList<GridItem>();
List<Integer> featuredIndex = getFeaturedIndex(things.size());
ArrayList<GridItem> featured = new ArrayList<GridItem>();
for (int i = 0, k = things.size(); i < k; i++) {
GridItem item = new GridItem(things.get(i));
if (featuredIndex.contains(i)) {
item.feature = true;
featured.add(item);
}
items.add(item);
}
for (GridItem feature : featured) {
int index = items.indexOf(feature);
GridItem shim = new GridItem(feature.getModel());
shim.shim = true;
items.add(index + 1, shim);
items.add(index + 3, shim);
items.add(index + 4, shim);
}
return items;
}
@Override
public int getItemViewType(int position) {
return getItem(position).shim ? 0 : 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = new View(getContext());
}
GridItem item = getItem(position);
if (item.feature) {
convertView.setLayoutParams(new LayoutParams(400,300));
} else {
convertView.setLayoutParams(new LayoutParams(200,150));
}
if (item.shim) {
convertView.setVisibility(View.GONE);
}
return convertView;
}
public static class GridItem {
private String mItem;
private boolean shim = false;
private boolean feature = false;
public GridItem(String item) {
mItem = item;
}
}
}
アイデアは、ビューがどのように振る舞うべきかを決定feature
とshim
フラグをGridItemでアイテムリストをラップすることです。
メソッドgetFeaturedIndex()
は、元のリスト内のどのアイテムを表示するかを計算します。その後、buildGridItems()
では2ステップを踏みます。まず、フィーチャーされたすべてのアイテムにフラグを立てます(これらのアイテムのリストを保持します)。その後、これらのおすすめアイテムのそれぞれについて、おすすめアイテムに関連して3つのシム(+1、+3、+ 4)を追加します。
注目アイテムのgetView()
では、適切なサイズを通常アイテムの2x2に設定しました。シムアイテムの場合は、可視性をGONE
に設定します。
- 1. 行スパンを含むHTMLテーブル
- 2. AngularJS:テーブル列スパン行スパン動的計算
- 3. DIVテーブルで列スパンと行スパンを行う方法
- 4. XSLT <改行とスパン - ><スパン
- 5. テキストを含むスパンのランダムな位置
- 6. 右の画像を含むスパン(テキスト)
- 7. スパンをスパン列に分割した
- 8. TD:文字列を含むがスパン内にない要素
- 9. テーブルの先頭からの行スパンおよび列スパン
- 10. ブートストラップグリッドレイアウト(スパン行?)
- 11. フレックスボックス行スパン
- 12. ワードプレス:スパンでコンテンツを包む
- 13. ディビジョン・スパン内のディバ・スパン.... DivSpanception
- 14. jqueryを使用した列の行スパン
- 15. GWT 2.4 DataGrid行スパン
- 16. [name]を含むすべてのスパンを取得する
- 17. Elasticsearch "スパンと"
- 18. 上部に貼り付けられたスパンを含むCSS div?
- 19. 固定列とcolスパンを持つブートストラップテーブル
- 20. ブートストラップのコンテナと行とスパンの違い
- 21. は、私はスパンIDからテキストをつかむしたいスパンIDエラー
- 22. 別のスパンより下のスパン
- 23. スパンをインラインにインラインで埋め込む
- 24. はスパン
- 25. jsoupスパン
- 26. セレン1クリックでスパン発行
- 27. cssグリッドグリッド列スパン問題
- 28. 同じ行の見出しとスパン
- 29. ハイチャート|チャートズーム&スパン| LMBとスパンで拡大(RMBで
- 30. WPF:UniformGridで行/列スパンを実行できますか?
こんにちは@返信ありがとうございました... 最初の提案はよかったですが、私はレイアウトの中で2つのリストビューを必要としません。1つのイメージが左上に大きく、グリッドビューの残りの部分は正常になります。 2番目の提案についてグリッドレイアウトではなくグリッドビューを使用しています。 私は非常に良いチュートリアルを見つけましたが、http://sudarnimalan.blogspot.sg/2012/06/android-bigger-image-for-first-item-of.html それを後退させましたが、それほど役に立ちませんでした。私のシナリオでは、単一のグリッドアイテム上に複数のボタンと画像が必要です。 –