Android 如何在一个gridview中创建两个不同数量的列
我想制作一个具有两个不同列数的gridview 实际上,我的gridview有两列作为Android 如何在一个gridview中创建两个不同数量的列,android,gridview,Android,Gridview,我想制作一个具有两个不同列数的gridview 实际上,我的gridview有两列作为fig1,在第5位,列数应该是1列作为fig2 我附上了我的截图,以便进一步澄清 //图1:电流输出 //图2:最终输出 您可以通过以下UI构造来实现这一点:构造一个垂直方向的ListView(或单列GridView),并在其中放置一个前两行有两列的GridView、一个ImageView(或其他紫色视图)和一个最后一行有两列的GridView(体育和艺术) 如果需要整行成为一列,请使用GridLayout和
fig1
,在第5位,列数应该是1列作为fig2
我附上了我的截图,以便进一步澄清
//图1:电流输出
//图2:最终输出
您可以通过以下UI构造来实现这一点:构造一个垂直方向的ListView(或单列GridView),并在其中放置一个前两行有两列的GridView、一个ImageView(或其他紫色视图)和一个最后一行有两列的GridView(体育和艺术) 如果需要整行成为一列,请使用GridLayout和merge columns尝试使用
我写了一个例子来帮助你解决问题。
结果与图2相同,但没有图像
在
build.gradle
文件中:
dependencies {
compile 'com.felipecsl.asymmetricgridview:library:2.0.1'
}
<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:divider="@android:color/transparent"
android:fadingEdge="none"
android:focusable="false"
android:gravity="center"
android:dividerHeight="3dp"
android:listSelector="#00000000"/>
import android.widget.ListAdapter;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import java.util.List;
public interface DemoAdapter extends ListAdapter {
void appendItems(List<DemoItem> newItems);
void setItems(List<DemoItem> moreItems);
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.felipecsl.asymmetricgridview.app.R;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* Sample adapter implementation extending from AsymmetricGridViewAdapter<DemoItem> This is the
* easiest way to get started.
*/
public class DefaultListAdapter extends ArrayAdapter<DemoItem> implements DemoAdapter {
private final LayoutInflater layoutInflater;
public DefaultListAdapter(Context context, List<DemoItem> items) {
super(context, 0, items);
layoutInflater = LayoutInflater.from(context);
}
public DefaultListAdapter(Context context) {
super(context, 0);
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, @NotNull ViewGroup parent) {
View v;
DemoItem item = getItem(position);
boolean isRegular = getItemViewType(position) == 0;
if (convertView == null) {
v = layoutInflater.inflate(
isRegular ? R.layout.adapter_item : R.layout.adapter_item_odd, parent, false);
} else {
v = convertView;
}
TextView textView;
if (isRegular) {
textView = (TextView) v.findViewById(R.id.textview);
} else {
textView = (TextView) v.findViewById(R.id.textview_odd);
}
textView.setText(String.valueOf(item.getPosition()));
return v;
}
@Override public int getViewTypeCount() {
return 2;
}
@Override public int getItemViewType(int position) {
return position % 2 == 0 ? 1 : 0;
}
public void appendItems(List<DemoItem> newItems) {
addAll(newItems);
notifyDataSetChanged();
}
public void setItems(List<DemoItem> moreItems) {
clear();
appendItems(moreItems);
}
}
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_odd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#007bbb"
android:gravity="center"
android:textColor="#0f0"
android:textSize="18sp" />
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import com.felipecsl.asymmetricgridview.library.model.AsymmetricItem;
public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
public DemoItem() {
this(1, 1, 0);
}
public DemoItem(int columnSpan, int rowSpan, int position) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.position = position;
}
public DemoItem(Parcel in) {
readFromParcel(in);
}
@Override public int getColumnSpan() {
return columnSpan;
}
@Override public int getRowSpan() {
return rowSpan;
}
public int getPosition() {
return position;
}
@Override public String toString() {
return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}
@Override public int describeContents() {
return 0;
}
private void readFromParcel(Parcel in) {
columnSpan = in.readInt();
rowSpan = in.readInt();
position = in.readInt();
}
@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(columnSpan);
dest.writeInt(rowSpan);
dest.writeInt(position);
}
/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {
@Override public DemoItem createFromParcel(@NonNull Parcel in) {
return new DemoItem(in);
}
@Override @NonNull public DemoItem[] newArray(int size) {
return new DemoItem[size];
}
};
}
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
private AsymmetricGridView listView;
private DemoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (AsymmetricGridView) findViewById(R.id.listView);
if (savedInstanceState == null) {
adapter = new DefaultListAdapter(this, getMoreItems(50));
} else {
adapter = new DefaultListAdapter(this);
}
listView.setRequestedColumnCount(2);
listView.setRequestedHorizontalSpacing(Utils.dpToPx(this, 3));
listView.setAdapter(getNewAdapter());
listView.setDebugging(true);
}
private AsymmetricGridViewAdapter<?> getNewAdapter() {
return new AsymmetricGridViewAdapter<>(this, listView, adapter);
}
private List<DemoItem> getMoreItems(int qty) {
List<DemoItem> items = new ArrayList<>();
DemoItem item = new DemoItem(1, 1, 0);
DemoItem item1 = new DemoItem(1, 1, 1);
DemoItem item2 = new DemoItem(1, 1, 2);
DemoItem item3 = new DemoItem(1, 1, 3);
DemoItem item4 = new DemoItem(2, 2, 4);
DemoItem item5 = new DemoItem(1, 1, 5);
DemoItem item6 = new DemoItem(1, 1, 6);
items.add(item);
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
items.add(item5);
items.add(item6);
return items;
}
}
在活动\u main.xml
文件中:
dependencies {
compile 'com.felipecsl.asymmetricgridview:library:2.0.1'
}
<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:divider="@android:color/transparent"
android:fadingEdge="none"
android:focusable="false"
android:gravity="center"
android:dividerHeight="3dp"
android:listSelector="#00000000"/>
import android.widget.ListAdapter;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import java.util.List;
public interface DemoAdapter extends ListAdapter {
void appendItems(List<DemoItem> newItems);
void setItems(List<DemoItem> moreItems);
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.felipecsl.asymmetricgridview.app.R;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* Sample adapter implementation extending from AsymmetricGridViewAdapter<DemoItem> This is the
* easiest way to get started.
*/
public class DefaultListAdapter extends ArrayAdapter<DemoItem> implements DemoAdapter {
private final LayoutInflater layoutInflater;
public DefaultListAdapter(Context context, List<DemoItem> items) {
super(context, 0, items);
layoutInflater = LayoutInflater.from(context);
}
public DefaultListAdapter(Context context) {
super(context, 0);
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, @NotNull ViewGroup parent) {
View v;
DemoItem item = getItem(position);
boolean isRegular = getItemViewType(position) == 0;
if (convertView == null) {
v = layoutInflater.inflate(
isRegular ? R.layout.adapter_item : R.layout.adapter_item_odd, parent, false);
} else {
v = convertView;
}
TextView textView;
if (isRegular) {
textView = (TextView) v.findViewById(R.id.textview);
} else {
textView = (TextView) v.findViewById(R.id.textview_odd);
}
textView.setText(String.valueOf(item.getPosition()));
return v;
}
@Override public int getViewTypeCount() {
return 2;
}
@Override public int getItemViewType(int position) {
return position % 2 == 0 ? 1 : 0;
}
public void appendItems(List<DemoItem> newItems) {
addAll(newItems);
notifyDataSetChanged();
}
public void setItems(List<DemoItem> moreItems) {
clear();
appendItems(moreItems);
}
}
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_odd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#007bbb"
android:gravity="center"
android:textColor="#0f0"
android:textSize="18sp" />
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import com.felipecsl.asymmetricgridview.library.model.AsymmetricItem;
public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
public DemoItem() {
this(1, 1, 0);
}
public DemoItem(int columnSpan, int rowSpan, int position) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.position = position;
}
public DemoItem(Parcel in) {
readFromParcel(in);
}
@Override public int getColumnSpan() {
return columnSpan;
}
@Override public int getRowSpan() {
return rowSpan;
}
public int getPosition() {
return position;
}
@Override public String toString() {
return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}
@Override public int describeContents() {
return 0;
}
private void readFromParcel(Parcel in) {
columnSpan = in.readInt();
rowSpan = in.readInt();
position = in.readInt();
}
@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(columnSpan);
dest.writeInt(rowSpan);
dest.writeInt(position);
}
/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {
@Override public DemoItem createFromParcel(@NonNull Parcel in) {
return new DemoItem(in);
}
@Override @NonNull public DemoItem[] newArray(int size) {
return new DemoItem[size];
}
};
}
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
private AsymmetricGridView listView;
private DemoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (AsymmetricGridView) findViewById(R.id.listView);
if (savedInstanceState == null) {
adapter = new DefaultListAdapter(this, getMoreItems(50));
} else {
adapter = new DefaultListAdapter(this);
}
listView.setRequestedColumnCount(2);
listView.setRequestedHorizontalSpacing(Utils.dpToPx(this, 3));
listView.setAdapter(getNewAdapter());
listView.setDebugging(true);
}
private AsymmetricGridViewAdapter<?> getNewAdapter() {
return new AsymmetricGridViewAdapter<>(this, listView, adapter);
}
private List<DemoItem> getMoreItems(int qty) {
List<DemoItem> items = new ArrayList<>();
DemoItem item = new DemoItem(1, 1, 0);
DemoItem item1 = new DemoItem(1, 1, 1);
DemoItem item2 = new DemoItem(1, 1, 2);
DemoItem item3 = new DemoItem(1, 1, 3);
DemoItem item4 = new DemoItem(2, 2, 4);
DemoItem item5 = new DemoItem(1, 1, 5);
DemoItem item6 = new DemoItem(1, 1, 6);
items.add(item);
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
items.add(item5);
items.add(item6);
return items;
}
}
在DefaultListAdapter.java
文件中:
dependencies {
compile 'com.felipecsl.asymmetricgridview:library:2.0.1'
}
<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:divider="@android:color/transparent"
android:fadingEdge="none"
android:focusable="false"
android:gravity="center"
android:dividerHeight="3dp"
android:listSelector="#00000000"/>
import android.widget.ListAdapter;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import java.util.List;
public interface DemoAdapter extends ListAdapter {
void appendItems(List<DemoItem> newItems);
void setItems(List<DemoItem> moreItems);
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.felipecsl.asymmetricgridview.app.R;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* Sample adapter implementation extending from AsymmetricGridViewAdapter<DemoItem> This is the
* easiest way to get started.
*/
public class DefaultListAdapter extends ArrayAdapter<DemoItem> implements DemoAdapter {
private final LayoutInflater layoutInflater;
public DefaultListAdapter(Context context, List<DemoItem> items) {
super(context, 0, items);
layoutInflater = LayoutInflater.from(context);
}
public DefaultListAdapter(Context context) {
super(context, 0);
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, @NotNull ViewGroup parent) {
View v;
DemoItem item = getItem(position);
boolean isRegular = getItemViewType(position) == 0;
if (convertView == null) {
v = layoutInflater.inflate(
isRegular ? R.layout.adapter_item : R.layout.adapter_item_odd, parent, false);
} else {
v = convertView;
}
TextView textView;
if (isRegular) {
textView = (TextView) v.findViewById(R.id.textview);
} else {
textView = (TextView) v.findViewById(R.id.textview_odd);
}
textView.setText(String.valueOf(item.getPosition()));
return v;
}
@Override public int getViewTypeCount() {
return 2;
}
@Override public int getItemViewType(int position) {
return position % 2 == 0 ? 1 : 0;
}
public void appendItems(List<DemoItem> newItems) {
addAll(newItems);
notifyDataSetChanged();
}
public void setItems(List<DemoItem> moreItems) {
clear();
appendItems(moreItems);
}
}
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_odd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#007bbb"
android:gravity="center"
android:textColor="#0f0"
android:textSize="18sp" />
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import com.felipecsl.asymmetricgridview.library.model.AsymmetricItem;
public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
public DemoItem() {
this(1, 1, 0);
}
public DemoItem(int columnSpan, int rowSpan, int position) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.position = position;
}
public DemoItem(Parcel in) {
readFromParcel(in);
}
@Override public int getColumnSpan() {
return columnSpan;
}
@Override public int getRowSpan() {
return rowSpan;
}
public int getPosition() {
return position;
}
@Override public String toString() {
return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}
@Override public int describeContents() {
return 0;
}
private void readFromParcel(Parcel in) {
columnSpan = in.readInt();
rowSpan = in.readInt();
position = in.readInt();
}
@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(columnSpan);
dest.writeInt(rowSpan);
dest.writeInt(position);
}
/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {
@Override public DemoItem createFromParcel(@NonNull Parcel in) {
return new DemoItem(in);
}
@Override @NonNull public DemoItem[] newArray(int size) {
return new DemoItem[size];
}
};
}
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
private AsymmetricGridView listView;
private DemoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (AsymmetricGridView) findViewById(R.id.listView);
if (savedInstanceState == null) {
adapter = new DefaultListAdapter(this, getMoreItems(50));
} else {
adapter = new DefaultListAdapter(this);
}
listView.setRequestedColumnCount(2);
listView.setRequestedHorizontalSpacing(Utils.dpToPx(this, 3));
listView.setAdapter(getNewAdapter());
listView.setDebugging(true);
}
private AsymmetricGridViewAdapter<?> getNewAdapter() {
return new AsymmetricGridViewAdapter<>(this, listView, adapter);
}
private List<DemoItem> getMoreItems(int qty) {
List<DemoItem> items = new ArrayList<>();
DemoItem item = new DemoItem(1, 1, 0);
DemoItem item1 = new DemoItem(1, 1, 1);
DemoItem item2 = new DemoItem(1, 1, 2);
DemoItem item3 = new DemoItem(1, 1, 3);
DemoItem item4 = new DemoItem(2, 2, 4);
DemoItem item5 = new DemoItem(1, 1, 5);
DemoItem item6 = new DemoItem(1, 1, 6);
items.add(item);
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
items.add(item5);
items.add(item6);
return items;
}
}
在adapter\u item\u odd.xml文件中:
dependencies {
compile 'com.felipecsl.asymmetricgridview:library:2.0.1'
}
<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:divider="@android:color/transparent"
android:fadingEdge="none"
android:focusable="false"
android:gravity="center"
android:dividerHeight="3dp"
android:listSelector="#00000000"/>
import android.widget.ListAdapter;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import java.util.List;
public interface DemoAdapter extends ListAdapter {
void appendItems(List<DemoItem> newItems);
void setItems(List<DemoItem> moreItems);
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.felipecsl.asymmetricgridview.app.R;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* Sample adapter implementation extending from AsymmetricGridViewAdapter<DemoItem> This is the
* easiest way to get started.
*/
public class DefaultListAdapter extends ArrayAdapter<DemoItem> implements DemoAdapter {
private final LayoutInflater layoutInflater;
public DefaultListAdapter(Context context, List<DemoItem> items) {
super(context, 0, items);
layoutInflater = LayoutInflater.from(context);
}
public DefaultListAdapter(Context context) {
super(context, 0);
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, @NotNull ViewGroup parent) {
View v;
DemoItem item = getItem(position);
boolean isRegular = getItemViewType(position) == 0;
if (convertView == null) {
v = layoutInflater.inflate(
isRegular ? R.layout.adapter_item : R.layout.adapter_item_odd, parent, false);
} else {
v = convertView;
}
TextView textView;
if (isRegular) {
textView = (TextView) v.findViewById(R.id.textview);
} else {
textView = (TextView) v.findViewById(R.id.textview_odd);
}
textView.setText(String.valueOf(item.getPosition()));
return v;
}
@Override public int getViewTypeCount() {
return 2;
}
@Override public int getItemViewType(int position) {
return position % 2 == 0 ? 1 : 0;
}
public void appendItems(List<DemoItem> newItems) {
addAll(newItems);
notifyDataSetChanged();
}
public void setItems(List<DemoItem> moreItems) {
clear();
appendItems(moreItems);
}
}
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_odd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#007bbb"
android:gravity="center"
android:textColor="#0f0"
android:textSize="18sp" />
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import com.felipecsl.asymmetricgridview.library.model.AsymmetricItem;
public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
public DemoItem() {
this(1, 1, 0);
}
public DemoItem(int columnSpan, int rowSpan, int position) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.position = position;
}
public DemoItem(Parcel in) {
readFromParcel(in);
}
@Override public int getColumnSpan() {
return columnSpan;
}
@Override public int getRowSpan() {
return rowSpan;
}
public int getPosition() {
return position;
}
@Override public String toString() {
return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}
@Override public int describeContents() {
return 0;
}
private void readFromParcel(Parcel in) {
columnSpan = in.readInt();
rowSpan = in.readInt();
position = in.readInt();
}
@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(columnSpan);
dest.writeInt(rowSpan);
dest.writeInt(position);
}
/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {
@Override public DemoItem createFromParcel(@NonNull Parcel in) {
return new DemoItem(in);
}
@Override @NonNull public DemoItem[] newArray(int size) {
return new DemoItem[size];
}
};
}
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
private AsymmetricGridView listView;
private DemoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (AsymmetricGridView) findViewById(R.id.listView);
if (savedInstanceState == null) {
adapter = new DefaultListAdapter(this, getMoreItems(50));
} else {
adapter = new DefaultListAdapter(this);
}
listView.setRequestedColumnCount(2);
listView.setRequestedHorizontalSpacing(Utils.dpToPx(this, 3));
listView.setAdapter(getNewAdapter());
listView.setDebugging(true);
}
private AsymmetricGridViewAdapter<?> getNewAdapter() {
return new AsymmetricGridViewAdapter<>(this, listView, adapter);
}
private List<DemoItem> getMoreItems(int qty) {
List<DemoItem> items = new ArrayList<>();
DemoItem item = new DemoItem(1, 1, 0);
DemoItem item1 = new DemoItem(1, 1, 1);
DemoItem item2 = new DemoItem(1, 1, 2);
DemoItem item3 = new DemoItem(1, 1, 3);
DemoItem item4 = new DemoItem(2, 2, 4);
DemoItem item5 = new DemoItem(1, 1, 5);
DemoItem item6 = new DemoItem(1, 1, 6);
items.add(item);
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
items.add(item5);
items.add(item6);
return items;
}
}
在MainActivity.java
文件中:
dependencies {
compile 'com.felipecsl.asymmetricgridview:library:2.0.1'
}
<com.felipecsl.asymmetricgridview.library.widget.AsymmetricGridView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:divider="@android:color/transparent"
android:fadingEdge="none"
android:focusable="false"
android:gravity="center"
android:dividerHeight="3dp"
android:listSelector="#00000000"/>
import android.widget.ListAdapter;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import java.util.List;
public interface DemoAdapter extends ListAdapter {
void appendItems(List<DemoItem> newItems);
void setItems(List<DemoItem> moreItems);
}
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.felipecsl.asymmetricgridview.app.R;
import com.felipecsl.asymmetricgridview.app.model.DemoItem;
import org.jetbrains.annotations.NotNull;
import java.util.List;
/**
* Sample adapter implementation extending from AsymmetricGridViewAdapter<DemoItem> This is the
* easiest way to get started.
*/
public class DefaultListAdapter extends ArrayAdapter<DemoItem> implements DemoAdapter {
private final LayoutInflater layoutInflater;
public DefaultListAdapter(Context context, List<DemoItem> items) {
super(context, 0, items);
layoutInflater = LayoutInflater.from(context);
}
public DefaultListAdapter(Context context) {
super(context, 0);
layoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, @NotNull ViewGroup parent) {
View v;
DemoItem item = getItem(position);
boolean isRegular = getItemViewType(position) == 0;
if (convertView == null) {
v = layoutInflater.inflate(
isRegular ? R.layout.adapter_item : R.layout.adapter_item_odd, parent, false);
} else {
v = convertView;
}
TextView textView;
if (isRegular) {
textView = (TextView) v.findViewById(R.id.textview);
} else {
textView = (TextView) v.findViewById(R.id.textview_odd);
}
textView.setText(String.valueOf(item.getPosition()));
return v;
}
@Override public int getViewTypeCount() {
return 2;
}
@Override public int getItemViewType(int position) {
return position % 2 == 0 ? 1 : 0;
}
public void appendItems(List<DemoItem> newItems) {
addAll(newItems);
notifyDataSetChanged();
}
public void setItems(List<DemoItem> moreItems) {
clear();
appendItems(moreItems);
}
}
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview_odd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#007bbb"
android:gravity="center"
android:textColor="#0f0"
android:textSize="18sp" />
import android.os.Parcel;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import com.felipecsl.asymmetricgridview.library.model.AsymmetricItem;
public class DemoItem implements AsymmetricItem {
private int columnSpan;
private int rowSpan;
private int position;
public DemoItem() {
this(1, 1, 0);
}
public DemoItem(int columnSpan, int rowSpan, int position) {
this.columnSpan = columnSpan;
this.rowSpan = rowSpan;
this.position = position;
}
public DemoItem(Parcel in) {
readFromParcel(in);
}
@Override public int getColumnSpan() {
return columnSpan;
}
@Override public int getRowSpan() {
return rowSpan;
}
public int getPosition() {
return position;
}
@Override public String toString() {
return String.format("%s: %sx%s", position, rowSpan, columnSpan);
}
@Override public int describeContents() {
return 0;
}
private void readFromParcel(Parcel in) {
columnSpan = in.readInt();
rowSpan = in.readInt();
position = in.readInt();
}
@Override public void writeToParcel(@NonNull Parcel dest, int flags) {
dest.writeInt(columnSpan);
dest.writeInt(rowSpan);
dest.writeInt(position);
}
/* Parcelable interface implementation */
public static final Parcelable.Creator<DemoItem> CREATOR = new Parcelable.Creator<DemoItem>() {
@Override public DemoItem createFromParcel(@NonNull Parcel in) {
return new DemoItem(in);
}
@Override @NonNull public DemoItem[] newArray(int size) {
return new DemoItem[size];
}
};
}
public class MainActivity extends AppCompatActivity{
private static final String TAG = "MainActivity";
private AsymmetricGridView listView;
private DemoAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (AsymmetricGridView) findViewById(R.id.listView);
if (savedInstanceState == null) {
adapter = new DefaultListAdapter(this, getMoreItems(50));
} else {
adapter = new DefaultListAdapter(this);
}
listView.setRequestedColumnCount(2);
listView.setRequestedHorizontalSpacing(Utils.dpToPx(this, 3));
listView.setAdapter(getNewAdapter());
listView.setDebugging(true);
}
private AsymmetricGridViewAdapter<?> getNewAdapter() {
return new AsymmetricGridViewAdapter<>(this, listView, adapter);
}
private List<DemoItem> getMoreItems(int qty) {
List<DemoItem> items = new ArrayList<>();
DemoItem item = new DemoItem(1, 1, 0);
DemoItem item1 = new DemoItem(1, 1, 1);
DemoItem item2 = new DemoItem(1, 1, 2);
DemoItem item3 = new DemoItem(1, 1, 3);
DemoItem item4 = new DemoItem(2, 2, 4);
DemoItem item5 = new DemoItem(1, 1, 5);
DemoItem item6 = new DemoItem(1, 1, 6);
items.add(item);
items.add(item1);
items.add(item2);
items.add(item3);
items.add(item4);
items.add(item5);
items.add(item6);
return items;
}
}
public类MainActivity扩展了AppCompatActivity{
私有静态最终字符串TAG=“MainActivity”;
私有不对称GridView listView;
专用适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView=(AsymmetricGridView)findViewById(R.id.listView);
如果(savedInstanceState==null){
adapter=新的DefaultListAdapter(这是getMoreItems(50));
}否则{
适配器=新的DefaultListAdapter(此);
}
setRequestedColumnCount(2);
setRequestedHorizontalSpacing(Utils.dpToPx(this,3));
setAdapter(getNewAdapter());
setDebugging(true);
}
私有AsymmetricGridViewAdapter getNewAdapter(){
返回新的AsymmetricGridViewAdapter(此、listView、适配器);
}
私有列表getMoreItems(整数数量){
列表项=新建ArrayList();
DemoItem项目=新的DemoItem(1,1,0);
DemoItem1=新的DemoItem(1,1,1);
DemoItem2=新的DemoItem(1,1,2);
DemoItem item3=新的DemoItem(1,1,3);
DemoItem4=新的DemoItem(2,2,4);
DemoItem item5=新的DemoItem(1,1,5);
DemoItem item6=新的DemoItem(1,1,6);
项目。添加(项目);
增加(第1项);
增加(第2项);
增加(第3项);
增加(第4项);
增加(第5项);
增加(第6项);
退货项目;
}
}