横向的GridView

对于横向的GridView,很多人会说,没必要,用RecycleView就可以完成,但是,我就喜欢搞点特别的,因此当初就写了个横向的GridView。网上的东西大部分都有很多其它的东西,比如你要找一个功能,它会给你十个,然后你要去改,还不如自己写出来。。我的原则就是一切以简单为主。

主要代码:

 

DisplayMetrics dm =new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
        float density = dm.density;
        int gridviewWidth = (int) (size * (length) * density);
        int itemWidth = (int) (length * density);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
        mygridview.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
        mygridview.setColumnWidth(itemWidth); // 设置列表项宽
//        gridsetRankPotentialActorGridViewView.setHorizontalSpacing(20); // 设置列表项水平间距
        mygridview.setStretchMode(GridView.NO_STRETCH);
        mygridview.setNumColumns(size); // 设置列数量=列表集合数

 

 

 

 

 

xml布局主要代码:
 
 
<HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginRight="5dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginBottom="10dp"> <demo.leo.com.horizontalgridview.MyGridView android:id="@+id/mygridview" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:numColumns="auto_fit" android:scrollbars="none" android:stretchMode="spacingWidthUniform" /> </LinearLayout> </HorizontalScrollView> 

 


话不多说,直接上传文件,另外附赠一个全能的ViewHolder

 

 

package demo.leo.com.horizontalgridview;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;

/**
 * Created by Leo on 2017/1/20.
 */
public class MyGridView extends GridView {
    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyGridView(Context context) {
        super(context);
    }

    public MyGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = widthMeasureSpec;
        super.onMeasure(expandSpec, heightMeasureSpec);
    }
}


    

        

            
        
    

package demo.leo.com.horizontalgridview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.widget.GridView;
import android.widget.LinearLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private MyGridView mygridview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initDatas();
        initMyGtideView();
    }

    private void initView() {
        mygridview = (MyGridView) findViewById(R.id.mygridview);
    }
    private ArrayList gridLists = new ArrayList<>();
    private void initDatas() {
        //自己添加数据吧。
        for (int i=0;i<20;i++){
            gridLists.add("ahjfkdsah");
        }
    }

    private void initMyGtideView() {
        int size = gridLists.size();

        int length = 90;
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        float density = dm.density;
        int gridviewWidth = (int) (size * (length) * density);
        int itemWidth = (int) (length * density);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
        mygridview.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
        mygridview.setColumnWidth(itemWidth); // 设置列表项宽
//        gridsetRankPotentialActorGridViewView.setHorizontalSpacing(20); // 设置列表项水平间距
        mygridview.setStretchMode(GridView.NO_STRETCH);
        mygridview.setNumColumns(size); // 设置列数量=列表集合数
        MyGridViewAdapter adapter = new MyGridViewAdapter(MainActivity.this, gridLists);
        mygridview.setAdapter(adapter);
    }


}
package demo.leo.com.horizontalgridview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.ArrayList;

/**
 * Created by Leo on 2017/1/20.
 */
public class MyGridViewAdapter extends BaseAdapter {
    Context context;
    ArrayList list;

    public MyGridViewAdapter(Context context, ArrayList list) {
        this.context = context;
        this.list = list;
    }

    @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;
        viewHolder = ViewHolder.getVH(convertView, context, R.layout.list_item);
//        TextView title = viewHolder.getView(R.id.title, TextView.class);
//        ImageView image = viewHolder.getView(R.id.image, ImageView.class);
        //自己去换图片吧
        //自己修改文字吧
        return viewHolder.convertView;
    }
}



    

    



package demo.leo.com.horizontalgridview;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Leo on 2017/1/20.
 */
public class ViewHolder {
    public View convertView;
    public static ViewHolder getVH(View convertView, Context content, int layout)
    {
        if(convertView==null) {

            convertView = View.inflate(content, layout, null);
        }

        ViewHolder holder = new ViewHolder(convertView);

        return  holder;
    }
    //     ImageView singlenews_iv;
//     TextView   title_tv;
//     TextView   time_tv;
    public Map maps = new HashMap();
    public ViewHolder(View convertView)
    {
        this.convertView = convertView;

    }
    public  T getView(int id)
    {
        if(maps.get(id)==null)
        {
            maps.put(id,convertView.findViewById(id));
        }
        return (T)maps.get(id);

    }
    public  T getView(int id,Class clazz)
    {
        return getView(id);
    }
    public TextView getTv(int id)
    {
        return getView(id,TextView.class);
    }
    public ImageView getIv(int id)
    {
        return getView(id,ImageView.class);
    }
}



    

        

            
        
    

package demo.leo.com.horizontalgridview;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.widget.GridView;
import android.widget.LinearLayout;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private MyGridView mygridview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initDatas();
        initMyGtideView();
    }

    private void initView() {
        mygridview = (MyGridView) findViewById(R.id.mygridview);
    }
    private ArrayList gridLists = new ArrayList<>();
    private void initDatas() {
        //自己添加数据吧。
        for (int i=0;i<20;i++){
            gridLists.add("ahjfkdsah");
        }
    }

    private void initMyGtideView() {
        int size = gridLists.size();

        int length = 90;
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        float density = dm.density;
        int gridviewWidth = (int) (size * (length) * density);
        int itemWidth = (int) (length * density);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT);
        mygridview.setLayoutParams(params); // 设置GirdView布局参数,横向布局的关键
        mygridview.setColumnWidth(itemWidth); // 设置列表项宽
//        gridsetRankPotentialActorGridViewView.setHorizontalSpacing(20); // 设置列表项水平间距
        mygridview.setStretchMode(GridView.NO_STRETCH);
        mygridview.setNumColumns(size); // 设置列数量=列表集合数
        MyGridViewAdapter adapter = new MyGridViewAdapter(MainActivity.this, gridLists);
        mygridview.setAdapter(adapter);
    }


}
package demo.leo.com.horizontalgridview;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.ArrayList;

/**
 * Created by Leo on 2017/1/20.
 */
public class MyGridViewAdapter extends BaseAdapter {
    Context context;
    ArrayList list;

    public MyGridViewAdapter(Context context, ArrayList list) {
        this.context = context;
        this.list = list;
    }

    @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;
        viewHolder = ViewHolder.getVH(convertView, context, R.layout.list_item);
//        TextView title = viewHolder.getView(R.id.title, TextView.class);
//        ImageView image = viewHolder.getView(R.id.image, ImageView.class);
        //自己去换图片吧
        //自己修改文字吧
        return viewHolder.convertView;
    }
}



    

    



package demo.leo.com.horizontalgridview;

import android.content.Context;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by Leo on 2017/1/20.
 */
public class ViewHolder {
    public View convertView;
    public static ViewHolder getVH(View convertView, Context content, int layout)
    {
        if(convertView==null) {

            convertView = View.inflate(content, layout, null);
        }

        ViewHolder holder = new ViewHolder(convertView);

        return  holder;
    }
    //     ImageView singlenews_iv;
//     TextView   title_tv;
//     TextView   time_tv;
    public Map maps = new HashMap();
    public ViewHolder(View convertView)
    {
        this.convertView = convertView;

    }
    public  T getView(int id)
    {
        if(maps.get(id)==null)
        {
            maps.put(id,convertView.findViewById(id));
        }
        return (T)maps.get(id);

    }
    public  T getView(int id,Class clazz)
    {
        return getView(id);
    }
    public TextView getTv(int id)
    {
        return getView(id,TextView.class);
    }
    public ImageView getIv(int id)
    {
        return getView(id,ImageView.class);
    }
}

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值