原文:http://www.cnblogs.com/ImyFen/archive/2015/11/15/4967127.html

说明:

1.viewpager不能左右滑动
2.转载时代码略有改动(注:修复tab控件不能自动滑动的问题)
3.原代码下载后不能直接运行,经过调整此问题已经修复

修复后代码下载:https://github.com/jdsjlzx/MoGuJie

核心代码:

package com.Imy.Fuli.Fragment;import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RadioGroup;
import android.widget.TextView;import com.Imy.Fuli.Activity.HomeActivity;
import com.Imy.Fuli.Adapter.HomeFragmentViewPagerAdapter;
import com.Imy.Fuli.R;
import com.Imy.Fuli.View.FragmentViewPager;
import com.Imy.Fuli.View.HorizontalListView;
import com.Imy.Fuli.View.LoadingPage;
import com.Imy.Fuli.View.SuspendScrollView;
import com.Imy.Fuli.common.Constant;
import com.Imy.Fuli.manager.ThreadManager;
import com.Imy.Fuli.tools.LogUtils;
import com.Imy.Fuli.tools.UiUtils;/*** Created by user on 2015/11/9.*/
public class HomeFragment extends BaseFragment {private FragmentViewPager mViewPager;private TextView mTextView;private LinearLayout mLinearLayout;private static boolean isInit = false;private HomeActivity mHomeActivity;private RadioGroup mRadioGroup;private LinearLayout linearLayout;private boolean isMeasured = false;private SuspendScrollView mSuspendScrollView;private LinearLayout RefreshHeadView;private HorizontalListView mHorizontalListView;private HorizontalListView mSupListView;private ImageView imageView;private LinearLayout mScrollContainer;/*** 当Fragment挂载的activity创建的时候调用** @param savedInstanceState*/@Overridepublic void onActivityCreated(Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);show(); //为了使第一次加载HomeFragment的时候可以正常显示 执行以下shouw方法.}@Overridepublic void onPause() {super.onPause();isInit = true;}@Overridepublic View createSuccessView() {View view = View.inflate(getContext(), R.layout.home_fragment_context, null);mScrollContainer = (LinearLayout) view.findViewById(R.id.scrollview_container);mLinearLayout = (LinearLayout) view.findViewById(R.id.home_banner_header);//广告头的总布局;mViewPager = (FragmentViewPager) view.findViewById(R.id.home_viewpager);mHorizontalListView = (HorizontalListView) view.findViewById(R.id.user); //非悬浮导航mSupListView = (HorizontalListView) view.findViewById(R.id.Sup); //悬浮导航Constant.MY_INDICATOR = mSupListView;imageView = (ImageView) view.findViewById(R.id.myimage);mHorizontalListView.setAdapter(new OrderAdapter(getContext()));mSupListView.setAdapter(new OrderAdapter(getContext()));RefreshHeadView = (LinearLayout) view.findViewById(R.id.scrollView_refresh_head);mSuspendScrollView = (SuspendScrollView) view.findViewById(R.id.home_scrollview);//接受参数mSuspendScrollView.setView(mLinearLayout, mSupListView, RefreshHeadView, mHorizontalListView,mScrollContainer);mSuspendScrollView.setOnRefreshScrollViewListener(new SuspendScrollView.OnRefreshScrollViewListener() {@Overridepublic void onRefresh() {UiUtils.showToast("下啦刷新中");//请求数据操作 子线程操作ThreadManager.getInstance().createLongPool().execute(new Runnable() {@Overridepublic void run() {SystemClock.sleep(1000);//模拟请求数据mSuspendScrollView.completeRefresh();}});}/*** 刷新完成时需要的操作  更新UI等*/@Overridepublic void onRefreshFinish() {UiUtils.showToast("刷新完成");}});mViewPager.setAdapter(new HomeFragmentViewPagerAdapter(getActivity().getSupportFragmentManager()));mViewPager.setOffscreenPageLimit(2);//设置预加载 防止切换时状态丢失setViewpagerHeight(mViewPager);initIndicator();mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {@Overridepublic void onPageSelected(int position) {super.onPageSelected(position);((OrderAdapter)mHorizontalListView.getAdapter()).setCurOrderItem(position);}});return view;}private void initIndicator() {mLinearLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {if (!isInit) {int top = mHorizontalListView.getTop();int height = mHorizontalListView.getHeight();//mSupListView.layout(0, top, mSupListView.getWidth(), top + height);}}});}private void setViewpagerHeight(final ViewPager mViewPager) {mHomeActivity = (HomeActivity) getActivity();mRadioGroup = mHomeActivity.getRadioGroup();linearLayout = mHomeActivity.getHomeActivityLinearLayout();linearLayout.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {if (!isMeasured) {int height = linearLayout.getHeight() - mRadioGroup.getHeight() - mHorizontalListView.getHeight();LinearLayout.LayoutParams llparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,height);mViewPager.setLayoutParams(llparams);LogUtils.w("是---------------------dp=" + UiUtils.px2dip(imageView.getHeight()));isMeasured = true;}return true;}});}@Overrideprotected LoadingPage.LoadResult load() {return LoadingPage.LoadResult.success;}}


类似实现:

1.高仿蘑菇街首页

演示地址:http://v.youku.com/v_show/id_XMTQ3NjM3MTkwNA==.html

代码:https://github.com/jjq3/MoguLayout

2.CollapsingToolbarLayout实现

效果图:
很遗憾的是图片太大超过2M,超过csdn图片大小限制,自己打开链接看吧!

https://github.com/sungerk/CoordinatorLayoutDemos/raw/master/art/5.gif

这个库里面还有很多CollapsingToolbarLayout控件的UI效果,有需要的可以参考。

代码:https://github.com/sungerk/CoordinatorLayoutDemos

Android自定义多TAB悬浮控件实现蘑菇街首页效果相关推荐

  1. android 自定义多tab悬浮控件,Android编程实现自定义Tab选项卡功能示例

    本文实例讲述了Android编程实现自定义Tab选项卡功能.分享给大家供大家参考,具体如下: import android.app.TabActivity; import android.conten ...

  2. Android自定义一个播放器控件

    介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actv ...

  3. Android 自定义日期段选择控件,开始日期-结束日期。

    开发中碰到个需求,需要在一个控件中选择完成开始和结束日期.实现的过程走的是程序员开发的老路子,找到轮子后自己改吧改吧就成了.去年做的找不到参考的文章连接了,请原博主见谅. 当时做的时候有几个需求:1. ...

  4. android可拖拽悬浮控件和Kotlin的可拖拽悬浮控件/可拖拽悬浮按钮带Demo附件

    本文讲解的是一个实现了可拖拽的悬浮按钮,并添加了吸附边框的功能. 借鉴于:https://www.jianshu.com/p/4f55bcbc1b83 在此之前,先了解下其简单的使用方式吧: 原文地址 ...

  5. Android 自定义底部上拉控件的实现

    前言 又到了新的一月,今天提供一个Android自定义底部上拉布局的实现,起因是自己在项目中需要实现这样一个控件,干脆自己写一个练练手. 写完了觉得能想到的需求都基本有了(可能会有其它需求,不过基本上 ...

  6. Android自定义滑动接听电话控件组

    一.目录结构 二.运行效果 三.代码实现 首先,自定义一个类IncomingPhone继承RelativeLayout public IncomingPhone(Context context, At ...

  7. android自定义view圆,Android自定义View圆形百分比控件(一)

    做一个自定义View的小练习,效果如下 只需要画一个圆.一个圆弧.一个百分比文本,添加一个点击事件,传入百分比重绘 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: 2. ...

  8. android 星级评论,Android自定义RatingBar(星级评分控件)

    1.首先在Drawable下建立five_rating_bar.xml android:id="@android:id/background" android:drawable=& ...

  9. Android自定义View 实现窗帘控件

    需求分析 这里只作简单介绍,最后会分享源码地址 窗帘分为三部分,上面的窗帘杆,杆下面的窗帘布,以及布中间的滑块,实现还是蛮简单的,我们可以通过自定义view把这个窗帘画出来 窗帘杆是一个上面是圆角,下 ...

最新文章

  1. 关于Go语言在服务端做Restful接口和socket通信
  2. 【Python】局部变量和全局变量以及组合数据(列表)类型
  3. SQL基础教程第五章笔记
  4. JavaScript 散集合(HashArray)
  5. unifig,是以基于 SpringCloud 的一个分布式 微服务 平台
  6. 数据库创建联合主键(MySql)
  7. 详解 BP 神经网络基本原理及 C 语言实现
  8. cc2530设计性实验代码六
  9. java所有单词汇总
  10. Java SE基础教程——Eclipse开发工具的安装与使用
  11. IDEA报Invalid bound statement (not found)错误解决办法
  12. YY淘宝商品数据库设计
  13. 【空气质量数据分析专题二】数据获取及预处理
  14. stata输出四分位、中位数的命令是什么?
  15. 交换机分布缓存_述说数据中心交换机的重要性能指标——缓存
  16. 由于无法验证发布者 所以windows阻止此软件
  17. 美术老师去世后,他做了一个算法模型,为老师的线稿上色
  18. WAP 2.0 VS WEB 2.0
  19. 在caffe 中添加Crowd counting 数据层
  20. gitto-page enrichment

热门文章

  1. mac 惠普 HP136w 打印机 wifi wps 打印乱码 扑克牌图标
  2. STM32之CAN控制器
  3. CSS 文字超出部分省略号代替
  4. 【matlab图像处理】图片生成手绘效果
  5. node 获取表单数据 为空_程序员:数据结构和算法,中序线索化二叉树
  6. 浅谈互联网时代下融媒技术现状
  7. 计算机学科经典著作上
  8. OpenGL 几何知识
  9. Leetcode 503:下一个更大元素 II(超详细的解法!!!)
  10. 第2课 认识计算机教案,第2课认识计算机教案.doc