android自定义动态滚动tab+viewpager+fragment

近来一段时间,项目有点空闲,就总结总结开发中常用的东西,封装封装,提炼提炼,写写博客与大家共勉,有什么不对的或者更好的思路欢迎大家广开言路~~

 

在android开发中,常见的ui框架中,很经典的一种就是如图所示:

 

整体是自定义的支持水平滚动的tab+左右滑动viewpager+fragment

入口activity  HorizontalScrollViewTestActivity:

<span style="font-size:18px;">package com.example.webservice.widget.ColumnHorizontalScrollView;

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

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.example.webservice.R;
import com.example.webservice.bean.TabCode;
import com.example.webservice.widget.scrollTab.ScrollTabs;
/**
 * 用来测试水平滚动的tab的实例activity
 * @author xhf
 *
 */
public class HorizontalScrollViewTestActivity extends FragmentActivity{
	
	private ViewPager mViewPager;
	
	/** 自定义HorizontalScrollView */
	private ColumnHorizontalScrollView mColumnHorizontalScrollView;
	/**
	 * 用来添加tab的root布局
	 */
	LinearLayout mRadioGroup_content;
	
	RelativeLayout rl_column;
	
	/** 左阴影部分*/
	public ImageView shade_left;
	
	/** 右阴影部分 */
	public ImageView shade_right;
	
	/** 屏幕宽度 */
	private int mScreenWidth = 0;
	
	private ScrollTabs stTabs;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.view_column_horizontal_scroll);
		initView();
	
	}
	
	private void initView()
	{
		mColumnHorizontalScrollView =  (ColumnHorizontalScrollView)findViewById(R.id.mColumnHorizontalScrollView);
		
		rl_column = (RelativeLayout) findViewById(R.id.rl_column);
		mViewPager = (ViewPager) findViewById(R.id.viewPager);
		//viewpager每次显示出来一个fragment时,都会把旁边的一个页面也预加载了,当然你可以控制预加载的页面的数量
		mViewPager.setOffscreenPageLimit(0);//不预加载
		shade_left = (ImageView) findViewById(R.id.shade_left);
		shade_right = (ImageView) findViewById(R.id.shade_right);
		
		stTabs = (ScrollTabs) findViewById(R.id.st_tabs);
		mColumnHorizontalScrollView.setParam(this, mScreenWidth, stTabs, shade_left, shade_right,  rl_column);
		List<TabCode> lists=new ArrayList<TabCode>();
		TabCode tc1=new TabCode(1000,"科技");
		TabCode tc2=new TabCode(1001,"财经");
		TabCode tc3=new TabCode(1002,"新闻");
		TabCode tc4=new TabCode(1003,"原创");
		TabCode tc5=new TabCode(1004,"体育");
		lists.add(tc1);
		lists.add(tc2);
		lists.add(tc3);
		lists.add(tc4);
		lists.add(tc5);
		
		//将activity传递到自定义view中,以获取screenWidth
		stTabs.setParams(HorizontalScrollViewTestActivity.this,lists);
//tab item点击事件	    </span>
<span style="font-size:18px;">stTabs.setOnItemClickListener(new ScrollTabs.OnItemClickListener() {
	        @Override
	        public void onItemClick(int index,TabCode tc) {
	            //重写底部的数据值
	            //envMonitorInfo = sysLoadMonitorInfos.get(index);
	            //loadStatisticsData(envMonitorInfo.getStatisticsData(), showDataType);
	           Toast.makeText(HorizontalScrollViewTestActivity.this, String.valueOf(tc.getCode()), Toast.LENGTH_LONG).show();
	        }
	    });
	    
	    List<Fragment> fragments=new ArrayList<Fragment>();
	    for(int i=0;i<lists.size();i++)
	    {
	    	TabFragment tf=new TabFragment();
	    	fragments.add(tf);
	    }
	    ViewPagerAdapter adapter=new ViewPagerAdapter(getSupportFragmentManager());
	    adapter.setmFragments(fragments);
	    mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
			
			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				//改变fragment的切换
				mViewPager.setCurrentItem(arg0);
				//改变scroll tab的头部选中效果
				stTabs.changeTabCursor(arg0);
			}
			
			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub
			}
			
			@Override
			public 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值