横向的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);
}
}