SmartTabLayout+PtrFrameLayout+ViewPager+Fragment简单实现
来源:互联网 发布:知乎运营模式 编辑:程序博客网 时间:2024/05/22 13:44
先来个效果:
1.引入相关layout
//下拉刷新
compile ‘in.srain.cube:ultra-ptr:1.0.11’
//Tab切换
compile ‘com.ogaclejapan.smarttablayout:library:1.6.0@aar’
compile ‘com.ogaclejapan.smarttablayout:utils-v4:1.6.0@aar’
地址分别是:
https://github.com/liaohuqiu/android-Ultra-Pull-To-Refresh
https://github.com/ogaclejapan/SmartTabLayout
2.属性分析
SmartTabLayout:
PtrFrameLayout:
有6个参数可配置:
阻尼系数
cube_ptr:ptr_resistance=”1.7”
默认: 1.7f,越大,感觉下拉时越吃力。触发刷新时移动的位置比例
cube_ptr:ptr_ratio_of_header_height_to_refresh=”1.2”
默认,1.2f,移动达到头部高度1.2倍时可触发刷新操作。回弹延时
cube_ptr:ptr_duration_to_close=”300”
默认 200ms,回弹到刷新高度所用时间头部回弹时间
cube_ptr:ptr_duration_to_close_header=”2000”
默认1000ms刷新是否保持头部
cube_ptr:ptr_keep_header_when_refresh=”true”
默认值 true.下拉刷新 / 释放刷新
cube_ptr:ptr_pull_to_fresh=”false”
默认为false释放刷新
也可以在java代码中配置
// the following are default settings
mPtrFrame.setResistance(1.7f);
mPtrFrame.setRatioOfHeaderHeightToRefresh(1.2f);
mPtrFrame.setDurationToClose(200);
mPtrFrame.setDurationToCloseHeader(1000);
// default is false
mPtrFrame.setPullToRefresh(false);
// default is true
mPtrFrame.setKeepHeaderWhenRefresh(true);
实现:
主Acitity
package com.demo.zx.zxokhttpfinal.ui.activity;import android.os.Bundle;import android.support.v4.view.ViewPager;import com.demo.zx.zxokhttpfinal.R;import com.demo.zx.zxokhttpfinal.base.BaseActivity;import com.demo.zx.zxokhttpfinal.ui.widget.fragment.PageFragment;import com.demo.zx.zxokhttpfinal.ui.widget.fragment.PageRecyclerFragment;import com.ogaclejapan.smarttablayout.SmartTabLayout;import com.ogaclejapan.smarttablayout.utils.v4.FragmentPagerItemAdapter;import com.ogaclejapan.smarttablayout.utils.v4.FragmentPagerItems;import butterknife.Bind;import butterknife.ButterKnife;import in.srain.cube.views.ptr.header.StoreHouseHeader;public class UltraPullActivity extends BaseActivity implements ViewPager.OnPageChangeListener{ public static final String TAG = UltraPullActivity.class.getSimpleName(); @Bind(R.id.viewpagertab) SmartTabLayout viewpagertab; @Bind(R.id.viewpager) ViewPager viewpager; private String mTitlePre; private StoreHouseHeader header; private FragmentPagerItemAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ultra_pull); ButterKnife.bind(this); initSmartTab(); } private void initSmartTab() { FragmentPagerItems.Creator creator = FragmentPagerItems.with(this); creator.add("tile1", PageFragment1.class) .add("tile2", PageFragment2.class); adapter = new FragmentPagerItemAdapter(getSupportFragmentManager(), creator.create()); viewpager.setAdapter(adapter); viewpagertab.setViewPager(viewpager); viewpagertab.setOnPageChangeListener(this); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { }}
两个fragment:
public class PageFragment1 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_page, container, false); ButterKnife.bind(this, root); return root;}
public class PageFragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_page, container, false); ButterKnife.bind(this, root); return root;}
activity_ultra_pull.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout 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" android:orientation="vertical"> <com.ogaclejapan.smarttablayout.SmartTabLayout android:id="@+id/viewpagertab" android:layout_width="match_parent" android:layout_height="48dp" app:stl_indicatorAlwaysInCenter="true" app:stl_indicatorWithoutPadding="false" app:stl_indicatorInFront="false" app:stl_indicatorInterpolation="smart" app:stl_indicatorGravity="bottom" app:stl_indicatorColor="#40C4FF" app:stl_indicatorThickness="4dp" app:stl_indicatorWidth="auto" app:stl_indicatorCornerRadius="2dp" app:stl_overlineColor="#4D000000" app:stl_overlineThickness="0dp" app:stl_underlineColor="#4D000000" app:stl_underlineThickness="1dp" app:stl_dividerColor="#4D000000" app:stl_dividerThickness="1dp" app:stl_defaultTabBackground="?attr/selectableItemBackground" app:stl_defaultTabTextAllCaps="true" app:stl_defaultTabTextColor="#FC000000" app:stl_defaultTabTextSize="12sp" app:stl_defaultTabTextHorizontalPadding="16dp" app:stl_defaultTabTextMinWidth="0dp" app:stl_distributeEvenly="false" app:stl_clickable="true" app:stl_titleOffset="24dp" app:stl_drawDecorationAfterTab="false" /> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/viewpagertab" /></LinearLayout>
fragment_page1.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.demo.zx.zxokhttpfinal.ui.widget.fragment.PageFragment"> <in.srain.cube.views.ptr.PtrFrameLayout android:id="@+id/store_house_ptr_frame" xmlns:cube_ptr="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" cube_ptr:ptr_resistance="1.7" cube_ptr:ptr_ratio_of_header_height_to_refresh="1.2" cube_ptr:ptr_duration_to_close="300" cube_ptr:ptr_duration_to_close_header="2000" cube_ptr:ptr_keep_header_when_refresh="true" cube_ptr:ptr_pull_to_fresh="false" > <GridView android:id="@+id/gv_game" android:layout_width="match_parent" android:layout_height="match_parent" android:layoutAnimation="@anim/anim_layout" android:numColumns="2" /> </in.srain.cube.views.ptr.PtrFrameLayout></FrameLayout>
fragment_page2.xml 同page1
build.gradle
//下拉刷新 compile 'in.srain.cube:ultra-ptr:1.0.11' //Tab切换 compile 'com.ogaclejapan.smarttablayout:library:1.6.0@aar' compile 'com.ogaclejapan.smarttablayout:utils-v4:1.6.0@aar' //compile 'com.ogaclejapan.smarttablayout:utils-v13:1.6.0@aar' compile 'cn.finalteam:okhttpfinal-dm:1.2.2' compile 'com.jakewharton:butterknife:7.0.1'
- SmartTabLayout+PtrFrameLayout+ViewPager+Fragment简单实现
- SmartTabLayout + ViewPager的使用
- viewpager+Fragment实现简单滑动切换效果
- SmartTabLayout简单使用
- ViewPager+Fragment实现TabHost
- Android实现ViewPager+Fragment
- TabLayout 实现ViewPager+fragment
- ViewPager+Fragment实现
- Fragment+ViewPager 实现仿微信
- fragment+viewpager实现布局
- ViewPager实现Fragment切换
- 仿QQ界面切换简单实现-ViewPager、Fragment
- android ViewPager Fragment实现微信qq简单滑动过程
- Android简单有效Viewpager+Fragment实现滑动标签页
- viewpager+listview+fragment实现简单的滑动标签页
- Fragment+ViewPager+RadioGroup实现的页面简单切换
- 结合Tab,ViewPager,Fragment实现简单分页滑动
- Android开发笔记之ViewPager+Fragment简单列子的实现
- Android工具类——NumberUtils把数字字符串转换成指定国家的货币类型
- Problem B: 结构体---职工信息结构体
- Android开发环境—软件(适用于win7/10 64位)
- 很简单的例子让你记住inner join、left join和right那点区别
- iOS7使用AFNetworking3.0上传图片时出现的问题-解决方案
- SmartTabLayout+PtrFrameLayout+ViewPager+Fragment简单实现
- Android第三方平台,快速应用开发
- SDUT 2868 贪心(最短时间过河问题)
- 缺失值处理方法
- 技术干货 | 初次微服务体验:从Docker容器农场说起
- 初始化与赋值之间的区别
- Java实现八大排序之一
- codeforces 653E. Bear and Forgotten Tree 2 连通问题
- 23 API-多线程(多线程概述,多线程实现方案,线程控制常见方法,线程安全问题及解决)