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;

}

}

android 上划卡住tab_Android SlidingTabLayout用法禁止ViewPager滑动相关推荐

  1. android 上划删除效果,仿小米任务清除

    先贴上示例程序,实现解析有空再补. 示例程序见:https://github.com/MiQt/UpRemove

  2. Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

    说明: 实现效果: 1- 用ViewPager实现Fragmen之间的切换 2- 底部用RadioGroup实现,更方便的实现图片和字体颜色的改变,更方便的通过RadioButton的点击事件来控制页 ...

  3. android 流行布局,Android流行UI布局——底部导航(BottomNavigationView+ViewPager+Fragment)...

    前言: Android端采用底部导航栏的APP非常多,比如微信.微博.支付宝...等等,这也不能说是盲目学习iOS,毕竟好东西大家都可以用,各家操作系统也都在博采众长,互相学习.Android端的底部 ...

  4. 【Android】在Android上使用OrmLite数据库框架 之 基本用法

    转载自:http://blog.csdn.net/oo8_8oo/article/details/7302156 官网:http://ormlite.com/ 官方帮助,目录: http://orml ...

  5. 在Android上实现HttpServer

    本文讲的是在Android上实现HttpServer,在最近的项目中因为要用Android作为一个服务器去做一个实时接收数据的功能,所以这个时候就要去做一个Android本地的微型服务器. 那么此时我 ...

  6. Android开源库介绍:AndLinker-Android 上的 IPC 库

    简介 最近一个老项目里看到了AndLinker,搜了一下: AndLinker是一款Android上的IPC (进程间通信) 库,结合了 AIDL 和 Retrofit 的诸多特性,且可以与 RxJa ...

  7. android studio 如何提示方法的用法

    方法/步骤1在 Eclipse中鼠标放上去就可以提示方法的用法,实际上Android Studio也可以设置的.如图 Preferences > Editor >Generan> S ...

  8. 如何调试 Android 上 HTTP(S) 流量

    http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/ 如何调试 Android 上 HTTP(S) ...

  9. 在 Android 上使用协程(二):Getting started

    原文作者 :Sean McQuillan 原文地址: Coroutines on Android (part II): Getting started 译者 : 秉心说 这是关于在 Android 中 ...

最新文章

  1. 2012-02-25工作记录
  2. 戴尔 成铭3980台式计算机,能文能武!戴尔成铭3980商用台式机评测
  3. wilkinson--生成Wilkinson特征值测试矩阵
  4. mysql工_mysql
  5. 机器学习之 weka学习(一)weka介绍,安装和配置环境变量
  6. margin-top绑架父节点问题的分析
  7. php put 参数,php – 如何在Guzzle 5中发送PUT请求的参数?
  8. python条件表达式三门课至少有一门及格_Python/ MySQL练习题(一)
  9. c++ string类 知识点整理
  10. Java教程:Java选择结构和循环结构的总结
  11. 中国首个开源基金会来了
  12. 未捕获的错误:始终违反:元素类型无效:预期为字符串(对于内置组件)或类/函数,但得到了:对象
  13. matlab中svm testacc参数,使用Matlab进行交叉验证的多类SVM的完整示例
  14. 20个使用 Java CompletableFuture的示例,不服不行
  15. 【转】POJ分类很好很有层次感
  16. 空手套白狼之——兼职中介
  17. python汉语词频统计_Python之四大名著汉字词频统计
  18. 浅析 Qemu 热迁移特性——Multifd
  19. 阿里云上的ssh反向代理
  20. 基于海思平台与QT框架的高效视频显示

热门文章

  1. 基础知识—数据类型-第一个C++程序
  2. 另辟蹊径:从其他角度去解决数据库问题
  3. 直播预告:电力行业互联网改革思路与应对方案
  4. 400+节点的Elasticsearch集群运维
  5. 教你如何在Spark Scala/Java应用中调用Python脚本
  6. Java变异出现错误:No enclosing instance of type XXX is accessible
  7. 云小课 | 华为云KYON之VPC终端节点
  8. AI如何提升10倍筛药效率?6月18日华为云携手中科院上海药物所揭开谜底
  9. 加快脑动脉瘤检测,AI来了
  10. 【API进阶之路】做OCR文字识别,谁说必须要有AI工程师?