自定义控件 防腾讯视频分类视图(1)

   最近做到一个视频项目,要求防腾讯视频的效果,包括首页,频道管理,和分类视图,自己写了一个首页,和一个分类视图,在网上看到了一个频道管理的已经有了高仿源码,就直接拿过来用了,这里贴上频道管理原文链接:

点击打开链接

     先上效果图:

       仔细看了一下腾讯视频的分类视图界面,最顶部是两大类型,最新,最热, 当选择最新最热的时候,下面的子栏目其实没有发生变化,变化的只有一个最下方的listview的数据,也就是大类型和子类型之间其实没有关联关系,

如果有关联关系,就需要在每次点击大类型的时候,重新clear掉在HorizontalScrollView中动态添加的标签(ps:动态标签外面必须用一层布局包含进去,因为HorizontalScrollView中不允许有多个view),然后每次都重新加载一遍,也就是重新动态添加一遍;

没有关联关系的话,只需要自定义一个视图,在自定义视图中创建一个linearylayout和一个横向的scroolview,动态添加scrollview中的元素,当然,linearlayout和scrollview中的view都要添加单击事件监听,事件监听只需要在自定义视图中实现,定义一个接口,暴露给外界,别忘记在定义接口方法的时候,传入当前大类型的id和小类型的ID哟!然后实现该接口的方法,这样,调用的时候,你就获取到了大类型的ID和小类型的ID,你就可以根据这个ID,来获取你想要的数据了,动态刷新你的下方的listview了。

       代码实现的原理大概就是这样子的,可能表达不清楚,那么就直接上代码吧!


package com.kindlion.media.view;

import java.util.ArrayList;
import java.util.List;
import com.kindlion.media.R;
import com.kindlion.media.tool.DataTools;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MyTypeView extends LinearLayout {
	
	/**
	 * 存储大类型的textview
	 */
	private List<TextView> titleListView;
	/**
	 * 存储子类型的textview
	 */
	private List<TextView> childTitleListView;
	
	//大分类的容器
	LinearLayout titleLayout;
	//横向列表的滑动视图
	private HorizontalScrollView mHorizontalScrollView;
	private LinearLayout mlayout ;
	
	private Context mContext;
	//设置子控件带panddingbottom 和 panddingtop属性的值
	private int viewPaddingBottom = 5;
	//设置子控件带 PaddingLeft 和 panddingright属性的值
	private int viewPaddingLeft = 10;
	//大的分类的数据源
	List<TypeBean> typeList = new ArrayList<TypeBean>();
	//子分类的数据源
	List<TypeBean> childTypeList = new ArrayList<TypeBean>();
	
	//纪录子类型选中的id
	private int childId = 0;
	//纪录大类型选中的位置
	private int typeId = 0;
	private int topBottom = 0;
	private int leftRight = 0;
	
	//判断大类型有没有被点击的锁 ,避免重复的点自己,刷新数据
	boolean flag = false;	//默认需要不可以触发子类型点点击事件	因为第一次加载点时候已经加载了子类
	
	//是否需要更新子类视图
	boolean updateChildEnable = false;	
	
	//定义的接口,暴露给外部,实现点击事件的逻辑处理,使用set方法暴露
	private onItemClickListener  typeItemClickListener;
	
	public MyTypeView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.setOrientation(LinearLayout.VERTICAL);
	}
	
	/**
	 * 初次调用 初始化视图
	 * @param mContext 上下文
	 * @param typeList 大类型的数据源(这里因为大类型不是HorizontalScrollView,只是一个线性布局,所以数量不宜多)
	 * @param childTypeList 子类型的数据源 
	 */
	public void OnViewInit(Context mContext,List<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值