类似优酷首页下面分类视频的效果

优酷中的效果:
类似优酷首页下面分类视频的效果 - 无尘 - 冷冽无尘
 
原理:通过ExpandableListView+HorizantalScrollView+GridView三者结合实现此功能。
源代码:
ListViewActivity.java

package com.src.zhang.demo;

import java.util.List;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;

import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnGroupClickListener;

/**
*
* @author Administrator
*
*/
public class ListViewActivity extends Activity
{
ExpandableListView expandableListView;

ListViewAdapter treeViewAdapter;

public String[] groups = { "列表1", "列表2", "列表3" };

public String[][] child = { { "" }, { "" }, { "" } };

public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

treeViewAdapter = new ListViewAdapter(this,
ListViewAdapter.PaddingLeft >> 1);
expandableListView = (ExpandableListView) this
.findViewById(R.id.expandableListView);


List<ListViewAdapter.TreeNode> treeNode = treeViewAdapter.GetTreeNode();
for (int i = 0; i < groups.length; i++)
{
ListViewAdapter.TreeNode node = new ListViewAdapter.TreeNode();
node.parent = groups[i];
for (int ii = 0; ii < child[i].length; ii++)
{
node.childs.add(child[i][ii]);
}
treeNode.add(node);
}

treeViewAdapter.UpdateTreeNode(treeNode);

expandableListView.setAdapter(treeViewAdapter);

//将组都展开
for(int i=0; i<treeViewAdapter.getGroupCount(); i++){
expandableListView.expandGroup(i);

}
//设置组不可点击
expandableListView.setOnGroupClickListener(new OnGroupClickListener() {

@Override
public boolean onGroupClick(ExpandableListView parent, View v,
int groupPosition, long id) {

return true;
}
});
expandableListView.setSelector(new ColorDrawable(Color.TRANSPARENT));
}
}

ListViewAdapter.java

package com.src.zhang.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;


import android.content.Context;

import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseExpandableListAdapter;
import android.widget.Toast;

import android.widget.SimpleAdapter;
import android.widget.TextView;

/**
* @author Administrator
*
*/
public class ListViewAdapter extends BaseExpandableListAdapter implements
OnItemClickListener
{
public static final int ItemHeight = 30;// 每项的高度
public static final int PaddingLeft = 36;// 每项的高度
private int myPaddingLeft = 0;

// private MyGridView toolbarGrid;
private GridView toolbarGrid;

private String menu_toolbar_name_array[] = { "存储卡", "我的下载", "图书导入", "系统备份",
"系统恢复", "清除全部", "在线升级", "快速入门", "关于开卷", "退出系统", "在线升级", "快速入门",
"关于开卷", "退出系统", "关于开卷", "退出系统", "关于开卷", "退出系统", "关于开卷", "退出系统" };
private int menu_toolbar_image_array[] = { R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard, R.drawable.icon_sdcard,
R.drawable.icon_sdcard };

private List<TreeNode> treeNodes = new ArrayList<TreeNode>();

private Context parentContext;

private LayoutInflater layoutInflater;

static public class TreeNode
{
Object parent;
List<Object> childs = new ArrayList<Object>();
}

public ListViewAdapter(Context view, int myPaddingLeft)
{
parentContext = view;
this.myPaddingLeft = myPaddingLeft;
}

public List<TreeNode> GetTreeNode()
{
return treeNodes;
}

public void UpdateTreeNode(List<TreeNode> nodes)
{
treeNodes = nodes;
}

public void RemoveAll()
{
treeNodes.clear();
}

public Object getChild(int groupPosition, int childPosition)
{
return treeNodes.get(groupPosition).childs.get(childPosition);
}

public int getChildrenCount(int groupPosition)
{
return treeNodes.get(groupPosition).childs.size();
}

static public TextView getTextView(Context context)
{
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ItemHeight);

TextView textView = new TextView(context);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
return textView;
}

/**
* 可自定义ExpandableListView
*/
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent)
{
if (convertView == null)
{
layoutInflater = (LayoutInflater) parentContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.grid_activity, null);

toolbarGrid = (GridView)convertView.findViewById(R.id.gridView);
LayoutParams linearParams = (LinearLayout.LayoutParams)toolbarGrid.getLayoutParams(); // 取控件mGrid当前的布局参数
linearParams.width = menu_toolbar_name_array.length * (113) + 5;
toolbarGrid.setLayoutParams(linearParams);
toolbarGrid.setNumColumns(menu_toolbar_name_array.length);
toolbarGrid.setColumnWidth(114);
toolbarGrid.setStretchMode(GridView.NO_STRETCH);
toolbarGrid.setAdapter(getMenuAdapter(menu_toolbar_name_array,
menu_toolbar_image_array));// 设置菜单Adapter

toolbarGrid.setOnItemClickListener(this);

}

return convertView;
}

/**
* 可自定义list
*/
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
{
TextView textView = getTextView(this.parentContext);
textView.setText(getGroup(groupPosition).toString());
textView.setPadding(myPaddingLeft + PaddingLeft, 0, 0, 0);
return textView;
}

public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}

public Object getGroup(int groupPosition)
{
return treeNodes.get(groupPosition).parent;
}

public int getGroupCount()
{
return treeNodes.size();
}

public long getGroupId(int groupPosition)
{
return groupPosition;
}

public boolean isChildSelectable(int groupPosition, int childPosition)
{
return true;
}

public boolean hasStableIds()
{
return true;
}

/**
* 构造菜单Adapter
*
* @param menuNameArray
* 名称
* @param imageResourceArray
* 图片
* @return SimpleAdapter
*/
private SimpleAdapter getMenuAdapter(String[] menuNameArray,
int[] imageResourceArray)
{
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < menuNameArray.length; i++)
{
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("itemImage", imageResourceArray[i]);
map.put("itemText", menuNameArray[i]);
data.add(map);
}
SimpleAdapter simperAdapter = new SimpleAdapter(parentContext, data,
R.layout.item_menu, new String[] { "itemImage", "itemText" },
new int[] { R.id.item_image, R.id.item_text });
return simperAdapter;
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
Toast.makeText(parentContext, "当前选中的是:" + position, Toast.LENGTH_SHORT)
.show();

}
}

设计到的布局xml:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ExpandableListView>

</LinearLayout>


grid_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:paddingLeft="1px"
android:paddingTop="1px"
android:paddingRight="1px"
android:paddingBottom="1px"
android:orientation="vertical">

<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/scroll_view"
android:layout_marginRight="13px"
android:scrollbars="none">
<LinearLayout
android:id="@+id/top_middle"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<GridView
android:id="@+id/gridView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:listSelector="#00ffffff">
</GridView>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>

item_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout_Item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dip" >

<ImageView
android:id="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true" >
</ImageView>

<TextView
android:id="@+id/item_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/item_image"
android:layout_centerHorizontal="true" >
</TextView>

</RelativeLayout>


类似优酷首页下面分类视频的效果 - 无尘 - 冷冽无尘


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值