Android自定义多TAB悬浮控件实现蘑菇街首页效果
原文: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悬浮控件实现蘑菇街首页效果相关推荐
- android 自定义多tab悬浮控件,Android编程实现自定义Tab选项卡功能示例
本文实例讲述了Android编程实现自定义Tab选项卡功能.分享给大家供大家参考,具体如下: import android.app.TabActivity; import android.conten ...
- Android自定义一个播放器控件
介绍 最近要使用播放器做一个简单的视频播放功能,开始学习VideoView,在横竖屏切换的时候碰到了点麻烦,不过在查阅资料后总算是解决了.在写VideoView播放视频时候定义控制的代码全写在Actv ...
- Android 自定义日期段选择控件,开始日期-结束日期。
开发中碰到个需求,需要在一个控件中选择完成开始和结束日期.实现的过程走的是程序员开发的老路子,找到轮子后自己改吧改吧就成了.去年做的找不到参考的文章连接了,请原博主见谅. 当时做的时候有几个需求:1. ...
- android可拖拽悬浮控件和Kotlin的可拖拽悬浮控件/可拖拽悬浮按钮带Demo附件
本文讲解的是一个实现了可拖拽的悬浮按钮,并添加了吸附边框的功能. 借鉴于:https://www.jianshu.com/p/4f55bcbc1b83 在此之前,先了解下其简单的使用方式吧: 原文地址 ...
- Android 自定义底部上拉控件的实现
前言 又到了新的一月,今天提供一个Android自定义底部上拉布局的实现,起因是自己在项目中需要实现这样一个控件,干脆自己写一个练练手. 写完了觉得能想到的需求都基本有了(可能会有其它需求,不过基本上 ...
- Android自定义滑动接听电话控件组
一.目录结构 二.运行效果 三.代码实现 首先,自定义一个类IncomingPhone继承RelativeLayout public IncomingPhone(Context context, At ...
- android自定义view圆,Android自定义View圆形百分比控件(一)
做一个自定义View的小练习,效果如下 只需要画一个圆.一个圆弧.一个百分比文本,添加一个点击事件,传入百分比重绘 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: 2. ...
- android 星级评论,Android自定义RatingBar(星级评分控件)
1.首先在Drawable下建立five_rating_bar.xml android:id="@android:id/background" android:drawable=& ...
- Android自定义View 实现窗帘控件
需求分析 这里只作简单介绍,最后会分享源码地址 窗帘分为三部分,上面的窗帘杆,杆下面的窗帘布,以及布中间的滑块,实现还是蛮简单的,我们可以通过自定义view把这个窗帘画出来 窗帘杆是一个上面是圆角,下 ...
最新文章
- 关于Go语言在服务端做Restful接口和socket通信
- 【Python】局部变量和全局变量以及组合数据(列表)类型
- SQL基础教程第五章笔记
- JavaScript 散集合(HashArray)
- unifig,是以基于 SpringCloud 的一个分布式 微服务 平台
- 数据库创建联合主键(MySql)
- 详解 BP 神经网络基本原理及 C 语言实现
- cc2530设计性实验代码六
- java所有单词汇总
- Java SE基础教程——Eclipse开发工具的安装与使用
- IDEA报Invalid bound statement (not found)错误解决办法
- YY淘宝商品数据库设计
- 【空气质量数据分析专题二】数据获取及预处理
- stata输出四分位、中位数的命令是什么?
- 交换机分布缓存_述说数据中心交换机的重要性能指标——缓存
- 由于无法验证发布者 所以windows阻止此软件
- 美术老师去世后,他做了一个算法模型,为老师的线稿上色
- WAP 2.0 VS WEB 2.0
- 在caffe 中添加Crowd counting 数据层
- gitto-page enrichment