android 上划卡住tab_Android SlidingTabLayout用法&禁止ViewPager滑动

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代码

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/sliding_tabs"

android:layout_width="match_parent"

android:layout_height="wrap_content" />

android:id="@+id/viewpager"

android:layout_width="match_parent"

android:layout_height="0px"

android:layout_weight="1"

android:background="@android:color/white"/>

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)=scaledTouchSlop)

{

return true;

}

break;

case MotionEvent.ACTION_UP:

case MotionEvent.ACTION_CANCEL:

startX = 0f;

startY = 0f;

break;

}

return false;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值