[带gif效果图](PagerSlidingTabStrip添加下滑上滑功能)根据touch事件的传递,滑动收起或下拉viewpager的标题指示器
2016-12-03 12:05
337 查看
效果图:
这里的标题指示器引用的是GitHub上火爆的项目 :PagerSlidingTabStrip, 这里根据最新的项目需求实现根据listview的上下滑动,收起和显示出标题指示器
布局:
这里的标题指示器引用的是GitHub上火爆的项目 :PagerSlidingTabStrip, 这里根据最新的项目需求实现根据listview的上下滑动,收起和显示出标题指示器
布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/fragment_recommend_list_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" /> <com.astuetz.PagerSlidingTabStrip android:id="@+id/fragment_recommend_list_tabs" android:layout_width="match_parent" android:layout_height="40dp" android:background="#FFFFFF" android:overScrollMode="never" android:textColor="@color/gray_979799_80" android:textSize="16dp" app:pstsDividerColor="@android:color/transparent" app:pstsIndicatorColor="@color/red2" app:pstsIndicatorHeight="0dp" app:pstsSelectColor="@color/red2" app:pstsTabBackground="@android:color/transparent" app:pstsTabPaddingLeftRight="16dp" app:pstsUnderlineColor="@android:color/transparent" app:pstsUnderlineHeight="0.5dp" /> </RelativeLayout> </RelativeLayout>代码:
package com.miu.apps.miss.fragment; import android.animation.ObjectAnimator; import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.ScrollView; import com.astuetz.PagerSlidingTabStrip; import com.miu.apps.miss.R; import com.miu.apps.miss.views.RecommendView; import com.yt.utils.DensityUtil; /** * yt make * Created by Administrator on 2016/12/03. * 图文推荐 */ public class FragmentRecommend extends Fragment { private Context mContext; private ViewPager mViewPager; public PagerSlidingTabStrip tabs; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_recommend_list, null); mContext = getContext(); initData(); initView(view); return view; } private void initView(View view) { mViewPager = (ViewPager) view.findViewById(R.id.fragment_recommend_list_viewpager); mViewPager.setOffscreenPageLimit(3);//设置缓存view 的个数(实际有3个,缓存2个+正在显示的1个) RecommendLListViewPagerAdapter adapter = new RecommendLListViewPagerAdapter(); mViewPager.setAdapter(adapter); // Bind the tabs to the ViewPager tabs = (PagerSlidingTabStrip) view.findViewById(R.id.fragment_recommend_list_tabs); tabs.setViewPager(mViewPager); } //精选,时尚,美妆,生活,剧情,音乐,创意 private String[] CLASSIFY = new String[]{CLASSIFY_CHOICENESS, CLASSIFY_FASHION, CLASSIFY_BEAUTY, CLASSIFY_LIVE, CLASSIFY_MUSIC, CLASSIFY_AUTHENTICATE, CLASSIFY_UNIQUE}; private static String CLASSIFY_CHOICENESS = " 每日精选 "; private static String CLASSIFY_FASHION = " 风向 "; private static String CLASSIFY_BEAUTY = " 美妆 "; private static String CLASSIFY_LIVE = " 态度 "; private static String CLASSIFY_MUSIC = " 榜样 "; private static String CLASSIFY_AUTHENTICATE = " 鉴定 "; private static String CLASSIFY_UNIQUE = " 别致 "; private void initData() { } /** * Viewpager adapter */ class RecommendLListViewPagerAdapter extends PagerAdapter { @Override public CharSequence getPageTitle(int position) { return CLASSIFY[position]; } @Override public int getCount() { return CLASSIFY.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { final RecommendView recommendView = new RecommendView(mContext, CLASSIFY[position]); recommendView.mListview.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN:// 按下 // 获取按下的时候的XY轴的位置 mDownX = event.getX(); mDownY = event.getY(); break; case MotionEvent.ACTION_MOVE:// 移动 float moveY = event.getY(); float diffY = mDownY - moveY;// 计算Y轴滚动偏移量 float moveX = event.getX(); float diffX = mDownX - moveX;// 计算X轴滚动偏移量 if (diffX > diffY) { if (isYetGliet) { tabGlide(true); } } else if (diffY > diffX) { if (diffY > 2) { if (isYetUpgliet) { tabGlide(false); } } else if (diffY < -2) { if (isYetGliet) { tabGlide(true); } } } // 更新DownXY的位置: mDownY = moveY; mDownX = moveX; break; case MotionEvent.ACTION_UP:// 抬起 break; } return false; } }); container.addView(recommendView); return recommendView; } } /** * viewpager TAB 是否下滑还是上滑 * * @param isGlide true 下滑 flase 上滑 */ private void tabGlide(boolean isGlide) { if (isGlide) { ObjectAnim 4000 ator animator = ObjectAnimator.ofFloat(tabs, "translationY", -DensityUtil.dip2px(mContext, 40), 0); animator.setDuration(300); animator.start(); isYetGliet = false; isYetUpgliet = true; } else { ObjectAnimator animator = ObjectAnimator.ofFloat(tabs, "translationY", 0, -DensityUtil.dip2px(mContext, 40)); animator.setDuration(300); animator.start(); isYetUpgliet = false; isYetGliet = true; } } private boolean isYetUpgliet = true; private boolean isYetGliet = true; private float mDownX; private float mDownY; }
相关文章推荐
- [带GIF效果图(PagerSlidingTabStrip添加下滑上滑功能)根据触摸事件的传递,滑动收起或下拉viewpager的标题指示器
- 针对PagerSlidingTabStrip 1.3的功能改善(滑动条长度根据标题长度动态变化)
- (四)使用PagerSlidingTabStrip和ViewPager实现可左右滑动和点击效果功能
- android之TabLayout实现PagerSlidingTabStrip,ViewpagerIndicator之类的效果滑动页面导航效果(类似网易新闻)
- 使用PagerSlidingTabStrip实现滑动标签同步的ViewPager效果
- android带有下划线的viewpager标题PagerSlidingTabStrip
- 【Android界面实现】使用PagerSlidingTabStrip实现滑动标签同步的ViewPager效果
- PagerSlidingTabStrip 标题添加小图标
- ViewPager顶部标题控件PagerSlidingTabStrip
- Fragment利用ViewPager实现左右滑动--第三方开源--SlidingTabLayout和SlidingTabStrip实现
- PagerSlidingTabStrip,酷炫的ViewPager的滑动导航,使用及解析
- ViewPager滑动标签-PagerSlidingTabStrip的使用
- PagerSlidingTabStrip加ViewPager的使用,PagerSlidingTabStrip增加单条目的点击事件
- Android典型界面设计(8) ——ViewPager+PagerSlidingTabStrip实现双导航
- 实现屏幕切换、滑动-ViewPager详解(二)之--------PagerTitleStrip与PagerTabStrip添加标题栏
- PagerSlidingTabStrip介绍及使用,让ViewPager更绚丽
- 002android初级篇之ViewPager及PagerSlidingTabStrip listview的使用
- ViewPager可滑动页面+PagerTitleStrip标题
- 滑动导航栏(PagerSlidingTabStrip)实践
- Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)