热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

android使用viewpager计算偏移量实现选项卡功能

这篇文章主要为大家详细介绍了android使用viewpager计算偏移量实现选项卡功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了android实现选项卡功能,通过计算偏移量,设置tetxview和imageView的对应值,一些color的值读者自己去补充

实现效果图:

(1)简单写一个主界面的布局activity_main.xml

<&#63;xml version="1.0" encoding="utf-8"&#63;>


 

 

  

  
  

 

 
 
 
 

(2)设置viewpager的适配器:FragmentAdapter

public class FragmentAdapter extends FragmentPagerAdapter {
 private ArrayList list;
 FragmentManager fm;

 public FragmentAdapter(FragmentManager fm, ArrayList list){
 super(fm);
 this.fm = fm;
 this.list = list;
 }

 @Override
 public Fragment getItem(int position) {
 return list.get(position);
 }

 @Override
 public int getCount() {
 return list.size();
 }
}

(3)然后设置三个fragment,因为有三个选项卡,所以我们新建三个fragment,分别是OneFragment、TwoFragment 、ThreeFragment ,布局的话也需要新建三个,跟fragment一一对应,因为布局过于简单,这里就不写了,简单写一点fragment的代码吧

public class OneFragment extends Fragment {

 @Nullable
 @Override
 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
 View view = inflater.inflate(R.layout.fragment_one,null);
 return view;
 }
}

(4)在MainActivity中,设置fragment的适配器,设置显示内容,并且做viewpager的事件监听

public class MainActivity extends FragmentActivity implements ViewPager.OnPageChangeListener,View.OnClickListener{
 private TextView tab1Tv;
 private TextView tab2Tv;
 private TextView tab3Tv;
 private View cursor;
 private ViewPager thirdVp;

 private ArrayList fragmentlist;
 private int offset = 0;
 private int screenWidth = 0;
 private int screenl_3;
 private LinearLayout.LayoutParams lp;

 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_product);

 //绑定控件
 tab1Tv = (TextView)findViewById(R.id.tab1_tv);
 tab2Tv = (TextView)findViewById(R.id.tab2_tv);
 tab3Tv = (TextView)findViewById(R.id.tab3_tv);
 cursor = (View) findViewById(R.id.cursor);
 thirdVp = (ViewPager) findViewById(R.id.thire_vp);

 //获取屏幕宽度
 DisplayMetrics dm = new DisplayMetrics();
 getWindowManager().getDefaultDisplay().getMetrics(dm);
 screenWidth = dm.widthPixels;
 screenl_3 = screenWidth/3; //裁剪3分之1
 lp = (LinearLayout.LayoutParams)cursor.getLayoutParams();

 fragmentlist = new ArrayList<>();
 fragmentlist.add(new OneFragment());
 fragmentlist.add(new TwoFragment());
 fragmentlist.add(new ThreeFragment());

 thirdVp.setAdapter(new FragmentAdapter(getSupportFragmentManager(),fragmentlist));
 thirdVp.setCurrentItem(0);
 thirdVp.setOffscreenPageLimit(2);

 thirdVp.setOnPageChangeListener(this);
 tab1Tv.setOnClickListener(this);
 tab2Tv.setOnClickListener(this);
 tab3Tv.setOnClickListener(this);
 }

 @Override
 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
 offset = (screenl_3-cursor.getLayoutParams().width)/2;
 Log.d("TAG", "111----"+position + "--" + positionOffset + "--"
  + positionOffsetPixels);
 final float scale = getResources().getDisplayMetrics().density;
 if (position == 0){
  lp.leftMargin = (int)(positionOffsetPixels/3)+offset;
 }else if(position ==1){
  lp.leftMargin = (int)(positionOffsetPixels/3)+screenl_3+offset;
 }
 cursor.setLayoutParams(lp);
 upTextcolor(position);
 }

 private void upTextcolor(int position){
 if (position==0){
  tab1Tv.setTextColor(getResources().getColor(R.color.title_bag));
  tab2Tv.setTextColor(getResources().getColor(R.color.text_color_context));
  tab3Tv.setTextColor(getResources().getColor(R.color.text_color_context));
 }else if(position==1){
  tab1Tv.setTextColor(getResources().getColor(R.color.text_color_context));
  tab2Tv.setTextColor(getResources().getColor(R.color.title_bag));
  tab3Tv.setTextColor(getResources().getColor(R.color.text_color_context));
 }else if(position==2){
  tab1Tv.setTextColor(getResources().getColor(R.color.text_color_context));
  tab2Tv.setTextColor(getResources().getColor(R.color.text_color_context));
  tab3Tv.setTextColor(getResources().getColor(R.color.title_bag));
 }
 }


 @Override
 public void onPageSelected(int position) {

 }

 @Override
 public void onPageScrollStateChanged(int state) {

 }

 @Override
 public void onClick(View view) {
 switch (view.getId()) {
  case R.id.tab1_tv:
  thirdVp.setCurrentItem(0);
  break;
  case R.id.tab2_tv:
  thirdVp.setCurrentItem(1);
  break;
  case R.id.tab3_tv:
  thirdVp.setCurrentItem(2);
  break;
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • MyBatis模糊查询和多条件查询一、ISmbmsUserDao层根据姓名模糊查询publicListgetUser();多条件查询publicList ... [详细]
  • FroggerTimeLimit:1000MSMemoryLimit:65536KTotalSubmissions:32257Accepted:10396DescriptionFr ... [详细]
  • 九宫格计算. ... [详细]
  • 22.Container With Most Water(能装最多水的容器)
    thecontainercontainsthemos ... [详细]
  • 本文分析和介绍了GLo ... [详细]
  • 2019.4.14第1001题:SumProblemProblemDescriptionHey,welcometoHDOJ(HangzhouDianziUniversityOnli ... [详细]
  • 这一篇主要总结一下jQuery这个js在引入的时候做的一些初始化工作第一句window.undefinedwindow.undefined;是为了兼容低版本的IE而写的因为在低版本 ... [详细]
  • spotify engineering culture part 1
    原文,因为原视频说的太快太长,又没有字幕,于是借助youtube,把原文听&打出来了。中文版日后有时间再翻译。oneofthebigsucceessfactorshereatSpo ... [详细]
  • vscode里的html标签导航的一系列问题
    哈喽,我今天带来的经验是,vscode在18年10月更新后的1.29以后,编辑html文档时,会发现最上面有个类似于HTML标签导航的玩意儿,可能部分同学和我一样不习惯用它们,现在 ... [详细]
  • Illustrator绘制逼真的愤怒的小鸟实例教程
    Illustrator教程: ... [详细]
  • 抓取百万知乎用户设计之实体设计
    一.实体的关系实体是根据返回的Json数据来设计的教育经历方面用户可以有很多教育经理,USER和education是一对多的关系,一个education对应一个education一 ... [详细]
  • 软件自动化测试的学习路线
    软件自动化测试的学习步骤软件测试交流群关注软件测试技术公众号获取阅读目录软件自动化测试的学习步骤自动化测试的本质自动化测试学习的误区自动化测试的职位自动化测试分类Web自动化 ... [详细]
  • iOS之富文本
    之前做项目时遇到一个问题:使用UITextView显示一段电影的简介,由于字数比较多,所以字体设置的很小,行间距和段间距也很小,一大段文字挤在一起看起来很别扭,想要把行间距调大,结 ... [详细]
  • Xib九宫格应用管理使用xib封装一个自定义view的步骤1新建一个继承UIView的自定义view,假设类名叫做(AppView)2新建一个AppView.xib文件来描述 ... [详细]
  • 【自制小工具】代码生成器
    【自制小工具】代码生成器陆陆续续接触过好几款代码生成工具,发现确实好用,但都会有那么点不完善的地方,所以索性就自己做一个吧。界面非常简单,反正是自己用的,简单点用起来也方便上图:左 ... [详细]
author-avatar
园园哚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有