我正在使用公交车预订应用程序,我想添加座位预订布局,例如在Red Bus App中。我使用GridView设计布局,但看起来像
我有什么我想要什么
我需要的座位1和2之间的空间要少一些,而座位2和3之间的空间要大一些,而座位3和4之间的空间又要像座位1和2一样。在最后一行中,我需要5个座位。我需要和红色巴士的布局完全一样。
XML格式
<RelativeLayout
android:id="@+id/seatLayoutLowerMain"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_below="@+id/seatLegendLayout"
android:layout_centerHorizontal="true"
android:layout_marginTop="10.0dip"
android:background="@drawable/seat_layout_border"
android:paddingBottom="5.0dp"
android:paddingRight="5.0dp" >
<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/driver"
android:layout_margin="4dp"
android:columnWidth="100dp"
android:gravity="center"
android:numColumns="5"
android:stretchMode="columnWidth" >
</GridView>
<RelativeLayout
android:id="@+id/driver"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/gridView1"
android:layout_marginRight="20.0dp"
android:layout_marginTop="5.0dp"
android:background="@drawable/steering_icon"
android:orientation="horizontal" >
</RelativeLayout>
</RelativeLayout>
座位选择活动
public class SeatSelection extends AppCompatActivity implements AdapterView.OnItemClickListener{
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;
public Bitmap seatIcon;
public Bitmap seatSelect;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_seat_selection);
seatIcon = BitmapFactory.decodeResource(this.getResources(), R.drawable.seat_layout_screen_nor_avl);
seatSelect = BitmapFactory.decodeResource(this.getResources(), R.drawable.seat_layout_screen_nor_std);
totalSeat(49);
gridView = (GridView) findViewById(R.id.gridView1);
customGridAdapter = new CustomGridViewAdapter(this, R.layout.seatrow_grid, gridArray);
gridView.setAdapter(customGridAdapter);
gridView.setOnItemClickListener(this);
}
public void totalSeat(int n)
{
for (int i = 1; i <= n; ++i)
{
gridArray.add(new Item(seatIcon, "Seat " + i));
}
}
public void seatSelected(int pos)
{
gridArray.remove(pos);
gridArray.add(pos, new Item(seatSelect, "Selected"));
customGridAdapter.notifyDataSetChanged();
}
public void seatDeselcted(int pos)
{
gridArray.remove(pos);
int i = pos + 1;
gridArray.add(pos, new Item(seatIcon, "Seat" + i));
customGridAdapter.notifyDataSetChanged();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
Item item = gridArray.get(position);
Bitmap seatcompare = item.getImage();
if (seatcompare == seatIcon)
{
seatSelected(position);
}
else
{
seatDeselcted(position);
}
}
}
CustomGridViewAdapter
public class CustomGridViewAdapter extends ArrayAdapter<Item>
{
Context context;
int layoutResourceId;
ArrayList<Item> data = new ArrayList<Item>();
public CustomGridViewAdapter(Context context, int layoutResourceId, ArrayList<Item> data)
{
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
RecordHolder holder = null;
try
{
if (row == null)
{
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new RecordHolder();
holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
row.setTag(holder);
}
else
{
holder = (RecordHolder) row.getTag();
}
Item item = data.get(position);
holder.txtTitle.setText(item.getTitle());
holder.imageItem.setImageBitmap(item.getImage());
} catch (Exception e)
{
e.printStackTrace();
}
return row;
}
public static class RecordHolder
{
public TextView txtTitle;
public ImageView imageItem;
}
}
最佳答案
您无需在此处使用gridview,而是可以结合使用线性布局和imageview来动态创建此视图。
您可以在此处检查示例。
https://github.com/varunjohn/Booking-Seats-Layout-Sample
关于android - 如何像Redbus一样进行座位预定,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49999901/