文档章节

Android SlidingTabLayout用法&禁止ViewPager滑动

IamOkay
 IamOkay
发布于 2015/04/28 11:34
字数 403
阅读 1023
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

Android 提供的API例子程序中有个自定义View,SlidingTabLayout+SlidingTabStrip,两者结合构造完美可滑动Tab

主要代码

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.example.android.common.logger.Log;
import com.example.android.common.view.CustomViewPager;
import com.example.android.common.view.SlidingTabLayout;

public class SlidingTabsBasicFragment extends Fragment {

    static final String LOG_TAG = "SlidingTabsBasicFragment";

    private SlidingTabLayout mSlidingTabLayout;

    private CustomViewPager mViewPager;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_sample, container, false);
    }

  
    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        mViewPager = (CustomViewPager) view.findViewById(R.id.viewpager);
        mViewPager.setAdapter(new SamplePagerAdapter());

        mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs);
        mSlidingTabLayout.setViewPager(mViewPager);
        
        mViewPager.setCanPageScroll(false);
    }
    
    class SamplePagerAdapter extends PagerAdapter {

        /**
         * @return the number of pages to display
         */
        @Override
        public int getCount() {
            return 10;
        }

        @Override
        public boolean isViewFromObject(View view, Object o) {
            return o == view;
        }
        @Override
        public CharSequence getPageTitle(int position) {
            return "Item " + (position + 1);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View view = getActivity().getLayoutInflater().inflate(R.layout.pager_item,
                    container, false);
            
            TextView title = (TextView) view.findViewById(R.id.item_title);
            title.setText(String.valueOf(position + 1));

            container.addView(view);
            return view;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View) object);
            Log.i(LOG_TAG, "destroyItem() [position: " + position + "]");
        }

    }
}

xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical">

    <com.example.android.common.view.SlidingTabLayout
          android:id="@+id/sliding_tabs"
          android:layout_width="match_parent"
          android:layout_height="wrap_content" />

    <com.example.android.common.view.CustomViewPager
          android:id="@+id/viewpager"
          android:layout_width="match_parent"
          android:layout_height="0px"
          android:layout_weight="1"
          android:background="@android:color/white"/>

</LinearLayout>

CustomViewPager

package com.example.android.common.view;

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewConfiguration;

public class CustomViewPager extends ViewPager {  
  
    private boolean isCanPageScroll = true;
	
    private int scaledTouchSlop = 0;
    
    private float startX = 0f;
    
    private float startY = 0f;
  
    public CustomViewPager(Context context) {  
        this(context,null);  
    }  
  
    public CustomViewPager(Context context, AttributeSet attrs) {  
        super(context, attrs);  
        scaledTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop();
    }  
    
    public void setCanPageScroll(boolean isCanScroll){  
        this.isCanPageScroll = isCanScroll;  
    }  
    
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
    	if(!isCanPageScroll && interceptTouchEvent(ev))
    	{
    		return true;
    	}
    	return  super.onTouchEvent(ev);
    }
    
    /**
     * 判断是否拦截滑动
     * @param ev
     * @return
     */
	private boolean interceptTouchEvent(MotionEvent ev) 
	{
		float curX = ev.getX();
    	float curY = ev.getY();
    	
    	switch (ev.getAction()) 
    	{
			case MotionEvent.ACTION_DOWN:
				startX = curX;
				startY = curY;
				break;
			case MotionEvent.ACTION_MOVE:
				if(Math.abs(curY-startY)<Math.abs(curX-startX) && Math.abs(curX-startX)>=scaledTouchSlop)
				{
					return true;
				}
				break;
			case MotionEvent.ACTION_UP:
			case MotionEvent.ACTION_CANCEL:
				startX = 0f;
				startY = 0f;
				break;

		}
    	return false;
	}
   
}


© 著作权归作者所有

IamOkay

IamOkay

粉丝 205
博文 483
码字总数 403228
作品 0
海淀
程序员
私信 提问
【求指教!!】Fragment ViewPager相关问题

想实现类似于微信的效果,点击Footer的tab整个页面的内容跟着变化,但是页面切换不需要滑动(页面切换包括手势切换和点击Footer的tab切换,默认ViewPager是手势切换和点击Footer的tab切换都有...

Summersize
2013/12/16
340
3
Android viewpager+fragment+viewpager+fragment 的问题

用了viewpager+fragment 嵌套viewpager+fragment, 第一个viewpager自定义了禁止滑动的功能,通过点击底部的导航栏进行切换,然后第二个viewpager可以滑动,但是当第二个viewpager滑动到最后...

飘渺的火
2017/12/11
184
0
一起学Android之ViewPager

本文以一个简单的小例子,简述在Android开发中ViewPager的常见用法,仅供学习分享使用。 概述 ViewPager是一个支持使用者左右滑动的布局管理控件,可以通过一个实现的(适配器)PageAdapter...

Alan.hsiang
01/27
0
0
Android 使用ViewPager实现左右循环滑动图片

ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1. 首先看一...

Carl_
2015/01/08
127
0
Android 使用ViewPager实现左右循环滑动图片

ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1. 首先看一...

程序袁_绪龙
2014/12/22
5.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

介绍一下ForkJoinPool的使用

ForkJoinPool 是 JDK1.7 开始提供的线程池。为了解决 CPU 负载不均衡的问题。如某个较大的任务,被一个线程去执行,而其他线程处于空闲状态。 ForkJoinTask 表示一个任务,ForkJoinTask 的子...

ConstXiong
刚刚
0
0
「从模板消息改版订阅消息」小程序推送

前言 只有光头才能变强。 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果近期有看我文章的同学,会知道我最近在公司做的是推送系统。推送系统在我这...

Java3y
7分钟前
2
1
一键安装kubernetes1.17.0

快速开始 环境信息 主机名 IP地址 master0 192.168.0.2 master1 192.168.0.3 master2 192.168.0.4 node0 192.168.0.5 服务器密码:123456 kubernetes高可用安装教程 只需要准备好服务器,在任...

sealyun
14分钟前
1
0
学习记录 互联网项目---3(Ribben优化)

3.3 负载均衡策略 {服务名称}.ribbon.NFLoadBalancerRuleClassName=具体策略 service:#服务名 ribbon: NFLoadBalancerRuleClassName : com.netflix.loadbalancer.RandomRule ......

Pole丶逐
35分钟前
5
0
redis - 的线程模型

redis 的线程模型 redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 so...

Canaan_
37分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部