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