HorizontalScrollView+LinearLayout+GridView实现横向滑动ListView

最终效果:

 

xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorAccent"
        android:layout_margin="5dp" >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="10dp" >
            <GridView
                android:id="@+id/grid"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:numColumns="auto_fit"
                android:stretchMode="spacingWidthUniform" >
            </GridView>
        </LinearLayout>
    </HorizontalScrollView>
</LinearLayout>

item xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/itemlayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:orientation="vertical" >
    <ImageView
        android:id="@+id/itemImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@mipmap/ic_launcher" >
    </ImageView>
    <TextView
        android:id="@+id/titleTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="Title"
        android:textColor="#000000" />

</LinearLayout>

java代码:

public class MainActivity extends AppCompatActivity {

    private List<String> dataList;
    private GridView gridView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        dataList = new ArrayList<>();
        // 调用数据初始化
        setData();
        // 调用设置初始化控件
        initControls();

    }

    /**
     * 初始化控件
     * */
    private void initControls(){
        gridView = findViewById(R.id.grid);
        // 设置GirdView
        setGridView();
    }

    /**设置数据*/
    private void setData() {
        dataList.add("111");
        dataList.add("222");
        dataList.add("333");
        dataList.add("444");
        dataList.add("555");
        dataList.add("666");
        dataList.add("777");
        dataList.add("888");
        dataList.add("999");
    }

    /**设置GirdView参数,绑定数据*/
    private void setGridView() {
        final int ITEM_PARAM_WIDTH = 100;// item 宽度参数
        final int GRID_VIEW_RIGHTMARGIN = 4;// 最后一个item与GridView右侧距离
        // 获取数据集合个数
        int size = dataList.size();
        //Display屏幕显示的详细信息
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        //int screenWidth = dm.widthPixels;// 当前屏幕宽度
        //int screenHeight = dm.heightPixels;// 当前屏幕高度
        float density = dm.density;// 屏幕单位
        // GridView 整体宽度
        int gridViewWidth = (int) (size * (ITEM_PARAM_WIDTH + GRID_VIEW_RIGHTMARGIN) * density);
        // item的宽度
        int itemWidth = (int) (ITEM_PARAM_WIDTH * density);
        // 重新创建布局
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                gridViewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
        gridView.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
        gridView.setColumnWidth(itemWidth); // 设置列表项宽
        gridView.setHorizontalSpacing(5); // 设置列表项水平间距
        gridView.setStretchMode(GridView.NO_STRETCH);
        gridView.setNumColumns(size); // 设置列数量=列表集合数
        // GridView设置adapter
        GridViewAdapter adapter = new GridViewAdapter(getApplicationContext(),
                dataList);
        gridView.setAdapter(adapter);
        gridView.setOnItemClickListener(adapterClick);
    }

    /**
     * GridView 点击事件
     * */
    AdapterView.OnItemClickListener adapterClick = new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
            Toast.makeText(getApplicationContext(),dataList.get(position),Toast.LENGTH_SHORT).show();
        }
    };
}
GridViewAdapter 代码:
public class GridViewAdapter extends BaseAdapter {

    Context context;
    List<String> list;
    public GridViewAdapter(Context _context,List<String> _list) {
        this.list = _list;
        this.context = _context;
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Object getItem(int position) {
        return list.get(position);
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        ViewHolder viewHolder = null;
        if (convertView == null){
           convertView = View.inflate(context,R.layout.list_item,null);
           viewHolder = new ViewHolder();

           viewHolder.itemImage = convertView.findViewById(R.id.itemImage);
           viewHolder.titleTV = convertView.findViewById(R.id.titleTV);

           convertView.setTag(viewHolder);
        }else {
           viewHolder = (ViewHolder) convertView.getTag();
        }

        // 设置图片
        viewHolder.itemImage.setImageDrawable(context.getDrawable(R.mipmap.ic_launcher));
        // 设置文字
        viewHolder.titleTV.setText(list.get(position));

        return convertView;
    }


    static class ViewHolder{
        ImageView itemImage;
        TextView titleTV;
    }
}


猜你喜欢

转载自blog.csdn.net/qq_19688207/article/details/130101536