android SlidingTabLayout实现ViewPager页卡滑动效果
先来张效果图(能够滑动切换页卡)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGVuZ2t2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
主页面布局文件 remind_auction_new_list.xml :
- <RelativeLayout
- style="@style/Rosemary.Plane"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <!--头部布局-->
- <com.liam.rosemary.ui.view.SlidingTabLayout
- android:id="@+id/stl_square"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
- <!--内容页-->
- <android.support.v4.view.ViewPager
- android:id="@+id/vp_square"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_below="@id/stl_square"/>
- <!--切割线-->
- <ImageView
- style="@style/Rosemary.Line"
- android:layout_below="@id/stl_square"
- android:src="@drawable/horizontal_shadow"/>
- </RelativeLayout>
主页面代码:
- public class MyRemindAuctionNewListActivity extends ActionBarActivity implements IInit {
- private SlidingTabLayout mSlidingTabLayout;
- private ViewPager mViewPager;
- private RemindAdapter mRemindAdapter;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.remind_auction_new_list);
- init();
- }
- @Override
- public void init() {
- ActionBarUtil.setup(this, R.string.my_remind);
- mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.stl_square);
- mViewPager =(ViewPager)findViewById(R.id.vp_square);
- // 设置ViewPager属性
- mRemindAdapter = new RemindAdapter(getSupportFragmentManager(), this);
- mViewPager.setOffscreenPageLimit(2);
- mViewPager.setAdapter(mRemindAdapter);
- // 定义 SlidingTabLayout
- mSlidingTabLayout.setDistributeEvenly(true);
- mSlidingTabLayout.setSelectedIndicatorColors(getResources().getColor(R.color.primary));
- mSlidingTabLayout.setBackgroundColor(getResources().getColor(R.color.white));
- mSlidingTabLayout.setCustomTabView(R.layout.view_tab, R.id.tv_text);
- mSlidingTabLayout.setViewPager(mViewPager); // 载入ViewPager
- }
- }
为ViewPager加入多个页卡的Adapter:
- public class RemindAdapter extends FragmentStatePagerAdapter {
- private String[] titles;
- private Context ctx;
- public RemindAdapter(FragmentManager fm, Context ctx) {
- super(fm);
- this.ctx = ctx;
- titles = ctx.getResources().getStringArray(R.array.remind_type);
- }
- @Override
- public Fragment getItem(int position) {
- if (position == 0) {//专场提醒
- return MyRemindAuctionListFragment.newInstance(0);
- } else {//卖家提醒
- return MyRemindSallerListFragment.newInstance(1);
- }
- }
- @Override
- public CharSequence getPageTitle(int position) {
- return titles[position];
- }
- @Override
- public int getCount() {
- return titles.length;
- }
- }
每一个页卡实际内容的Fragment:
- public class MyRemindAuctionListFragment extends BaseFragment implements IPagination, IResponseHandler, SwipeRefreshLayout.OnRefreshListener {
- private int mTag;
- private ListView mListView;//拍场列表
- private ListAdapter<AuctionInfoViewModel> mAdapter;//拍场适配器
- private MyRemindAuctionNewListActivity mActivity;
- //下拉刷新组件
- private SwipeRefreshLayout mSwipeRefreshLayout;
- private AuctionInfoViewModel mViewModel = new AuctionInfoViewModel();
- private TextView mEmptyView; // 空白视图
- public static MyRemindAuctionListFragment newInstance(int tag) {
- MyRemindAuctionListFragment f = new MyRemindAuctionListFragment();
- f.mTag = tag;
- return f;
- }
- @Override
- public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.remind_auction_list, null);
- mSwipeRefreshLayout = $(v, R.id.srl_refresh);
- mListView = $(v, R.id.remind_auction_listview);
- mEmptyView = $(v, R.id.tv_remind_warning);
- mSwipeRefreshLayout.setOnRefreshListener(this);
- mSwipeRefreshLayout.setColorSchemeResources(R.color.background_blue_standard, R.color.white, R.color.background_blue_standard, R.color.white);
- fetchData(FIRST);
- return v;
- }
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- if (activity instanceof MyRemindAuctionNewListActivity) {
- mActivity = ((MyRemindAuctionNewListActivity) activity);
- }
- }
- @Override
- public void fetchNewData(int tag) {
- mViewModel.increasePageIndex();
- fetchData(FIRST);
- }
- @Override
- public void fetchData(int tag) {
- mActivity.toggleProgress(true);
- GetMyRemindAuctionListParam param = new GetMyRemindAuctionListParam(Data.getUserID(), mViewModel.getPageIndex(), Data.PAGE_SIZE_MEDIUM);
- AuctionApi.getMyRemindAuctionList(this, param);
- }
- @Override
- public void updateUI(Object response, int tag) {
- mActivity.toggleProgress(false);
- mSwipeRefreshLayout.setRefreshing(false);
- mViewModel.inflate(response);
- if (mAdapter == null) {
- mAdapter = new ListAdapter<AuctionInfoViewModel>(mActivity, mViewModel.getList(), R.layout.item_list_remind_auction) {
- @Override
- protected void onBind(int position, AuctionInfoViewModel item, ViewHolder holder) {
- holder.setImageUrl(R.id.head_icon, item.getImageUrl());
- holder.setText(R.id.title, item.getAuctionIDStr());
- holder.setText(R.id.sub_title, item.getAuctionName());
- holder.setText(R.id.tv_auction_status, item.getStatusStr());
- ((TextView) holder.get(R.id.tv_auction_status)).setTextColor(getResources().getColor(item.getColor()));
- }
- };
- mListView.setAdapter(mAdapter);
- mEmptyView.setText(R.string.notice_auction_no_remind);
- mEmptyView.setGravity(Gravity.CENTER);
- mListView.setEmptyView(mEmptyView);
- /**
- * 上拉很多其它
- */
- mListView.setOnScrollListener(new AbsListView.OnScrollListener() {
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- switch (scrollState) {
- case SCROLL_STATE_IDLE:
- if (mListView.getLastVisiblePosition() == mViewModel.getList().size() - 1) {
- if (!mViewModel.isComplete()) {
- fetchNewData(FIRST);
- }
- }
- break;
- }
- }
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- }
- });
- } else {
- mAdapter.notifyDataSetChanged();
- }
- mListView.setOnItemClickListener(new onItemClickListener());
- }
- @Override
- public void onRefresh() {
- refresh();
- }
- @Override
- public void refresh() {// 重置页索引、适配器
- mViewModel.reset();
- fetchData(FIRST);
- }
- @Override
- public int getTotal() {
- if (mAdapter == null) return 0;
- return mAdapter.getCount();
- }
- /**
- * 监听事件,以此启动不同页面
- */
- class onItemClickListener implements AdapterView.OnItemClickListener {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- int temp = mViewModel.getList().get(position).getStatus();
- int auctionID = mViewModel.getList().get(position).getAuctionID();
- Intent mIntent = new Intent();
- switch (temp) {
- case 1:
- mIntent.setClass(getActivity(), AuctionPreviewActivity.class);
- break;
- case 2:
- mIntent.setClass(getActivity(), AuctionPreviewActivity.class);
- break;
- case 3:
- mIntent.setClass(getActivity(), AuctionPreviewActivity.class);
- break;
- default:
- break;
- }
- mIntent.putExtra(EnumIntentKey.AUCTION_ID.toString(), auctionID);
- startActivity(mIntent);
- }
- }
- }
android SlidingTabLayout实现ViewPager页卡滑动效果的更多相关文章
- Android:使用ViewPager实现左右滑动切换图片(图上有点点)
在以下实例的基础上加上点点 Android:使用ViewPager实现左右滑动切换图片 (简单版) 效果预览: 因为要把点点放图片上,所以修改布局为相对布局: <?xml version=&qu ...
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...
- Android:使用ViewPager实现左右滑动切换图片 (简单版)
ViewPager,它是google SDk中自带的一个附加包的一个类, 可以使视图滑动. 步骤: 1.引入android-support-v4.jar包,在主布局里加入 <android.su ...
- Android实现多页左右滑动效果,支持子view动态创建和cache
要实现多页滑动效果,主要是需要处理onTouchEvent和onInterceptTouchEvent,要处理好touch事件的子控件和父控件的传递问题. 滚动控制可以利用android的Scroll ...
- 011 Android TabLayout+ViewPager实现顶部滑动效果(多个页面)
1.TabLayout介绍 TabLayout提供了一个水平的布局用来展示Tabs,很多应用都有这样的设计,典型的有网易新闻,简书,知乎等.TabLayout就可以很好的完成这一职责,首先TabLay ...
- 兔子--Fragment与ViewPager要切换滑动效果
效果图: 文件夹结构: 代码分析: MainActivity.java package com.example.myfragment; /** * @author Arthur Lee * @time ...
- Android 仿百度手机助手首页滑动效果
今天看到百度手机助手首页上的滑动效果非常nice,主要功能归结为: 1.当手指上划时,顶部搜索栏随手指移动距离而缩小到隐藏,隐藏后内容还是可以继续移动 2.手指下滑时,当显示内容达到第一个时,顶部搜索 ...
- 使用ViewPager实现广告滑动效果
效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSk1DNjAx/font/5a6L5L2T/fontsize/400/ ...
- Android Studio 使用ViewPager + Fragment实现滑动菜单Tab效果 --简易版
描述: 之前有做过一个记账本APP,拿来练手的,做的很简单,是用Eclipse开发的: 最近想把这个APP重新完善一下,添加了一些新的功能,并选用Android Studio来开发: APP已经完善了 ...
随机推荐
- (转)js arguments对象
在javascript中,不需要明确指出参数名,就能访问它们.如: function hi(){if(arguments[0]=="andy"){ return;}aler ...
- ImageView的学习
学习安卓时我还是习惯看懂手册,虽然是英文但是可以获得的东西必然也是更多的,否则自己只能停留在拾人牙缝的水平,虽然我是初学,但是还是分享一些自己的学习过程及方法. 从手册中我们看以知道,ImageVie ...
- effective C#之 - 使用属性代替成员变量
使用属性代替公共成员变量,一个很明显的好处是,很容易在一个地方对成员变量进行控制,例如: class Customer { private string name; public string Nam ...
- POP动画引擎中Layer与CALayer的一点区别
POP动画引擎是facebook提供的一个开源框架, 可以实现很多的动画效果, 这里就不一一介绍啦, 有兴趣的童鞋请移步: https://github.com/facebook/pop 下面简单的讲 ...
- nodejs http.get乱码问题处理方法
var req = http.get(url,function(res){ res.setEncoding('utf-8'); var html = '' res.on('data',function ...
- jsp之间url传值出现中文乱码
示例: T1.jsp http://localhost:8080/test/Test.action?site=北京 T2.jsp ..... <%@ page language="ja ...
- 信息安全实验一:buffer-overflow
title: buffer-overflow date: 2016-01-10 14:17:17 categories: information-security tags: buffer-overf ...
- jquery-qrcode在线生成二维码
通过bower进行获取: y@y:ydkt$ bower install jquery-qrcode --save bower not-cached git://github.com/gcusnieu ...
- Altium designer PCB中过孔铺地连接的设置
在Altium designer 6及更高版本如Altium Designer Winter 9.altium designer summer 9都会有这样的问题,在Altium DXP2004里面是 ...
- C51的一些误区和注意事项
1) C忌讳绝对定位.常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了.在C中变量的定位是编译器的事情,初学者只要定义变量和变量的作用域,编译器就把一个固定地址给这个变量.怎么取得这个 ...