package com.nzs.horizontallistview; import java.util.ArrayList; import java.util.List; import com.nzs.horizontallistview.R; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.GridView; import android.widget.HorizontalScrollView; import android.widget.ImageView; import android.widget.LinearLayout; /** * 用GridView实现横向listview * */ public class MainActivity extends FragmentActivity { private Context mContext; private HorizontalScrollView mImageContainer; private GridViewAdapter mGridViewAdapter; private GridView mGridView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mGridView = (GridView) findViewById(R.id.image_grid_view); mImageContainer = (HorizontalScrollView) findViewById(R.id.image_grid_view_container); mContext = getApplicationContext(); mGridViewAdapter = new GridViewAdapter(); mGridView.setAdapter(mGridViewAdapter); refreshImageGridview(); } private List<Bitmap> getEditingBitmaps(){ List<Bitmap> images = new ArrayList<Bitmap>(); // icon总数40个 for(int i=0; i < 40; i++){ images.add(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher)); } return images; } private void refreshImageGridview() { mImageContainer.setVisibility(View.VISIBLE); List<Bitmap> images = getEditingBitmaps(); int imageSize = images.size(); mGridViewAdapter.setBitmaps(images); // 行数 int rowNum = 4; int gridItemWidth = getResources().getDimensionPixelSize(R.dimen.image_gridview_width); int gridItemHeight = getResources().getDimensionPixelSize(R.dimen.image_gridview_width); int gap = getResources().getDimensionPixelSize(R.dimen.image_gridview_gap); // 列数 int columnNum = imageSize / rowNum; if (columnNum % rowNum != 0) { columnNum++; } // girdview的宽高 int gridViewWidth = (gridItemWidth + gap) * columnNum; int gridViewHeight = (gridItemHeight + gap) * rowNum; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(gridViewWidth, gridViewHeight); mGridView.setLayoutParams(params); mGridView.setColumnWidth(gridItemWidth); mGridView.setHorizontalSpacing(gap); mGridView.setVerticalSpacing(gap); mGridView.setStretchMode(GridView.NO_STRETCH); mGridView.setNumColumns(columnNum); } /** * GridViewAdapter适配器 * */ private class GridViewAdapter extends BaseAdapter { private List<Bitmap> mBitmaps = new ArrayList<Bitmap>(); private ViewHolder mViewHolder; public void setBitmaps(List<Bitmap> images){ mBitmaps = images; notifyDataSetChanged(); } @Override public int getCount() { return mBitmaps != null ? mBitmaps.size() : 0; } @Override public Object getItem(int position) { return mBitmaps != null ? mBitmaps.get(position) : null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ convertView = LayoutInflater.from(mContext).inflate(R.layout.gridview_item, parent, false); mViewHolder = new ViewHolder(); mViewHolder.mImageView = (ImageView) convertView.findViewById(R.id.image_view); convertView.setTag(mViewHolder); }else{ mViewHolder = (ViewHolder) convertView.getTag(); } mViewHolder.mImageView.setImageBitmap(mBitmaps.get(position)); return convertView; } public class ViewHolder{ public ImageView mImageView; } } }