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;
}
}
android 上划卡住tab_Android SlidingTabLayout用法禁止ViewPager滑动相关推荐
- android 上划删除效果,仿小米任务清除
先贴上示例程序,实现解析有空再补. 示例程序见:https://github.com/MiQt/UpRemove
- Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
说明: 实现效果: 1- 用ViewPager实现Fragmen之间的切换 2- 底部用RadioGroup实现,更方便的实现图片和字体颜色的改变,更方便的通过RadioButton的点击事件来控制页 ...
- android 流行布局,Android流行UI布局——底部导航(BottomNavigationView+ViewPager+Fragment)...
前言: Android端采用底部导航栏的APP非常多,比如微信.微博.支付宝...等等,这也不能说是盲目学习iOS,毕竟好东西大家都可以用,各家操作系统也都在博采众长,互相学习.Android端的底部 ...
- 【Android】在Android上使用OrmLite数据库框架 之 基本用法
转载自:http://blog.csdn.net/oo8_8oo/article/details/7302156 官网:http://ormlite.com/ 官方帮助,目录: http://orml ...
- 在Android上实现HttpServer
本文讲的是在Android上实现HttpServer,在最近的项目中因为要用Android作为一个服务器去做一个实时接收数据的功能,所以这个时候就要去做一个Android本地的微型服务器. 那么此时我 ...
- Android开源库介绍:AndLinker-Android 上的 IPC 库
简介 最近一个老项目里看到了AndLinker,搜了一下: AndLinker是一款Android上的IPC (进程间通信) 库,结合了 AIDL 和 Retrofit 的诸多特性,且可以与 RxJa ...
- android studio 如何提示方法的用法
方法/步骤1在 Eclipse中鼠标放上去就可以提示方法的用法,实际上Android Studio也可以设置的.如图 Preferences > Editor >Generan> S ...
- 如何调试 Android 上 HTTP(S) 流量
http://greenrobot.me/devpost/how-to-debug-http-and-https-traffic-on-android/ 如何调试 Android 上 HTTP(S) ...
- 在 Android 上使用协程(二):Getting started
原文作者 :Sean McQuillan 原文地址: Coroutines on Android (part II): Getting started 译者 : 秉心说 这是关于在 Android 中 ...
最新文章
- 2012-02-25工作记录
- 戴尔 成铭3980台式计算机,能文能武!戴尔成铭3980商用台式机评测
- wilkinson--生成Wilkinson特征值测试矩阵
- mysql工_mysql
- 机器学习之 weka学习(一)weka介绍,安装和配置环境变量
- margin-top绑架父节点问题的分析
- php put 参数,php – 如何在Guzzle 5中发送PUT请求的参数?
- python条件表达式三门课至少有一门及格_Python/ MySQL练习题(一)
- c++ string类 知识点整理
- Java教程:Java选择结构和循环结构的总结
- 中国首个开源基金会来了
- 未捕获的错误:始终违反:元素类型无效:预期为字符串(对于内置组件)或类/函数,但得到了:对象
- matlab中svm testacc参数,使用Matlab进行交叉验证的多类SVM的完整示例
- 20个使用 Java CompletableFuture的示例,不服不行
- 【转】POJ分类很好很有层次感
- 空手套白狼之——兼职中介
- python汉语词频统计_Python之四大名著汉字词频统计
- 浅析 Qemu 热迁移特性——Multifd
- 阿里云上的ssh反向代理
- 基于海思平台与QT框架的高效视频显示
热门文章
- 基础知识—数据类型-第一个C++程序
- 另辟蹊径:从其他角度去解决数据库问题
- 直播预告:电力行业互联网改革思路与应对方案
- 400+节点的Elasticsearch集群运维
- 教你如何在Spark Scala/Java应用中调用Python脚本
- Java变异出现错误:No enclosing instance of type XXX is accessible
- 云小课 | 华为云KYON之VPC终端节点
- AI如何提升10倍筛药效率?6月18日华为云携手中科院上海药物所揭开谜底
- 加快脑动脉瘤检测,AI来了
- 【API进阶之路】做OCR文字识别,谁说必须要有AI工程师?